Denselben Sound mehrmals gleichzeitig abspielen.
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?
besucht http://www.dark-matter-soft.de
so gehts ...
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)
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:
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.
So 
--> 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
Das kann aber keine ogg und mp3 on the fly ...So![]()
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:
@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.
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
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
Wolfgang:
Hm geht tatsächlich.
Aber sobald ich es folgendermasen abändere:
statt
geht es schon wieder nicht -_-
(heisst ich kann das play() in keine procedure stecken)
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()
(heisst ich kann das play() in keine procedure stecken)
besucht http://www.dark-matter-soft.de
-
Robert Wünsche
- Beiträge: 243
- Registriert: 29.08.2004 12:46
- Wohnort: Irgendwo im nirgendwo
- Kontaktdaten:
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)
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)
besucht http://www.dark-matter-soft.de
-
Robert Wünsche
- Beiträge: 243
- Registriert: 29.08.2004 12:46
- Wohnort: Irgendwo im nirgendwo
- Kontaktdaten: