Denselben Sound mehrmals gleichzeitig abspielen.

Fragen zu Grafik- & Soundproblemen und zur Spieleprogrammierung haben hier ihren Platz.
Serge
Beiträge: 66
Registriert: 20.09.2004 20:44
Kontaktdaten:

Beitrag von Serge »

Also ich denke mal "samplesource" und "soundeffect" sind interfaces und es ist in PB wohl nur möglich stinknormale Variablen und keine Listen/Felder/Strucuteren mit Interfaces zu definieren? Oder irre ich mich?
WolfgangS
Beiträge: 30
Registriert: 09.09.2004 09:42

so gehts ...

Beitrag von WolfgangS »

Code: Alles auswählen

Enumeration
  #audiere
EndEnumeration

IncludeFile "audiere.pbi"
  
Structure SOUNDSTRUCTURE
    SampleSourceObject.SampleSource
    SoundEffectObject.SoundEffect
EndStructure

Dim mysound.SOUNDSTRUCTURE(5)
  
  
If OpenLibrary(#audiere,"audiere.dll")=0
MessageRequester("","Error audiere.dll",0):End:EndIf
    
                                                ; opens a device
AudioDeviceObject.AudioDevice=AUDIERE_OpenDevice(@"winmm",@"buffer=1000,rate=44100")    
    If AudioDeviceObject=0
    MessageRequester("","Error AUDIERE_OpenDevice:",0):End:EndIf


                                                 ; opens a music
mysound(0)\SampleSourceObject = AUDIERE_OpenSampleSource(@"machinae_supremacy_-_sidstyler.ogg",#FF_AUTODETECT) 
    If mysound(0)\SampleSourceObject=0
    MessageRequester("","Error AUDIERE_OpenSampleSource",0):End:EndIf


mysound(0)\SoundEffectObject=AUDIERE_OpenSoundEffect(AudioDeviceObject,mysound(0)\SampleSourceObject,#MULTIPLE)  
    If mysound(0)\SoundEffectObject=0                                        
    MessageRequester("","Error OpenSound",0):End:EndIf 




mysound(0)\SoundEffectObject\play()                              ; play the soundEffect


MessageRequester("","Press OK für'n zweiten sound",0)

mysound(0)\SoundEffectObject\play()                              ; play the soundEffect

MessageRequester("","Jetzt hörst Du zwei Sounds",0)


mysound(0)\SoundEffectObject\stop()                              ; stop the soundEffect


mysound(0)\SoundEffectObject\ref()                         ; refcounter+1
mysound(0)\SoundEffectObject\unref()                       ; delete the object (refCounter-1)
                                                ; Note:
                                                ; it isn't necessary to delete the 
                                                ; SampleSourceObject and the AudioDeviceObject
CloseLibrary(#audiere)
So gehts, keine Ahnung was da anders ist ...


MFG
WolfgangS
Zuletzt geändert von WolfgangS am 19.11.2004 21:29, insgesamt 1-mal geändert.
WolfgangS' Purebasic Projekte: www.schliess.net
Robert Wünsche
Beiträge: 243
Registriert: 29.08.2004 12:46
Wohnort: Irgendwo im nirgendwo
Kontaktdaten:

Beitrag von Robert Wünsche »

Warum, warum schlägt ihr euch mit externen libs rum ?
--> pb:
--> hier folgt gleich etwas code aus meiner engine zum abspielen unendlich vieler sounds mit den pb befehlen.

Code: Alles auswählen

Procedure G_sound_playfree (p_dateipfad.s,p_spielfequenz.f)
  ergebniss = LoadSound(#PB_Any, p_dateipfad.s)
  If ergebniss = 0
    ProcedureReturn 0
  Else
  EndIf
  PlaySound(ergebniss)
  ProcedureReturn ergebniss
EndProcedure
So :mrgreen:
WolfgangS
Beiträge: 30
Registriert: 09.09.2004 09:42

Beitrag von WolfgangS »

So :mrgreen:
Das kann aber keine ogg und mp3 on the fly ... :freak:


MFG
WolfgangS
WolfgangS' Purebasic Projekte: www.schliess.net
Robert Wünsche
Beiträge: 243
Registriert: 29.08.2004 12:46
Wohnort: Irgendwo im nirgendwo
Kontaktdaten:

Beitrag von Robert Wünsche »

ogg ... naja, eigentlich schon :) (siehe pb hilfe),
mp3 ... eigentlich nicht, könnte aber noch kommen !
oder ich progs in 5 jahren selbst :mrgreen: . :wink:
Benutzeravatar
Lars
Beiträge: 347
Registriert: 31.08.2004 23:53
Wohnort: Shanghai
Kontaktdaten:

Beitrag von Lars »

@Robert Wünsche

Na du bist mir ja ein Held. Du lädst jeden Sound, der abgespielt werden
soll neu. Wenn du jetzt ein Spiel hat, wo beispielsweise für jeden Schuss
einer MG (um das ganze an einem sehr extremen Beispiel zu zeigen) ein
neuer Sound geladen wurde, hast du das Problem, dass du irgendwann
den Sound x 1000 mal im Speicher liegen hast, der ist dann auch mal voll
irgendwann und es geht nichts mehr.
Lars
The only problem with troubleshooting is, that sometimes the trouble shoots back.
P4 2,6Ghz, 512MB RAM, GeForce 6200, WinXP Pro SP2, PB V3.94
Serge
Beiträge: 66
Registriert: 20.09.2004 20:44
Kontaktdaten:

Beitrag von Serge »

Wolfgang:
Hm geht tatsächlich.
Aber sobald ich es folgendermasen abändere:
statt

Code: Alles auswählen

  sounds()\soundEffectObject\play()

Code: Alles auswählen

Procedure test()
  sounds()\soundEffectObject\play()                              ; play the soundEffect 
EndProcedure
test()
geht es schon wieder nicht -_-
(heisst ich kann das play() in keine procedure stecken)
Robert Wünsche
Beiträge: 243
Registriert: 29.08.2004 12:46
Wohnort: Irgendwo im nirgendwo
Kontaktdaten:

Beitrag von Robert Wünsche »

ja gut, das weiß ich auch :roll: , ich arbeite noch daran !
Übrigens: 1000 * 300kb = 1000 * 0,3 = 300 MB !
Ich glaube, das pb das selbstständig erledigt, oder kann man irgentwie die gebrauchte sounddateigröße im Ram messen ?
Serge
Beiträge: 66
Registriert: 20.09.2004 20:44
Kontaktdaten:

Beitrag von Serge »

PB erledigt das löschen selbstständig, ja, aber erst beim beenden des Programms.
Ein weiterer Nachteil deines Systems ist, dass man nicht so einfach Dateien in Echtzeit laden kann, dies geht auf die Kosten der Performance :/
(deswegen ja auch meine erste idee mit Catchsound, aber dies scheint auch nicht besonders schnell zu sein)
Robert Wünsche
Beiträge: 243
Registriert: 29.08.2004 12:46
Wohnort: Irgendwo im nirgendwo
Kontaktdaten:

Beitrag von Robert Wünsche »

Wie in echtzeit ?

Ich hab jetzt so was wie einen virtuellen "interrupt" eingebaut, der den speicher begrentz, :) .
Antworten