Seite 1 von 4
Denselben Sound mehrmals gleichzeitig abspielen.
Verfasst: 18.11.2004 21:49
von Serge
Wenn ich einen Sound lade, ihn Abspiele und dann nach kurzer Zeit wieder abspiele, wird das erste Abspielen abgebrochen. Dies führt oft zu nicht gerade schönen Soundschnipseln.
Nunja wie könnte ich das verhindern?
Ich habe mir erst überlegt, die Soundeffekte beim abspielen mit catchsound zu laden, abzuspielen und dann zu löschen. Ich habe mit den ganzen Catch... befehlen noch nichts gemacht, aber wenn ich mich nicht irre, funktioniert es ja so, dass die Sachen gleich mit der .exe in den Speicher geladen werden und somit recht schnell zugriffsbereit sein sollten?
Aber da stellt sich trotzdem ein Problem: Man kann nicht ermitteln, ob der Soundeffekt schon zu ende abgespielt wurde oder nicht. Man könnte es mit einem Umweg übergehen, indem man die Länge zu jedem Soundeffekt in einer Datei aufschreibt und dann eine liste mit ner Laufvariable für die Sounds erstellt, die beim ablaufen dieser, gelöscht werden.
Oder gibt es da einen Sinvolleren Weg, z. B. mit Movies evtl.?
Verfasst: 18.11.2004 22:09
von MVXA
wenn ich dich richtig verstanden habe suchst du danach:
Syntax
PlaySound(#Sound [, Modus])
Beschreibung
Startet das Abspielen des angegebenen '#Sound's. 'Modus' ist optional und kann folgenden Wert annehmen:
0: Spielt den Sound nur einmal (Standard-Wert, wenn 'Modus' weggelassen wird)
1: Spielt den Sound fortwährend (in einer Endlos-Schleife). Nicht verfügbar unter Linux!
nach dem 2. parameter
Re: Denselben Sound mehrmals gleichzeitig abspielen.
Verfasst: 18.11.2004 22:11
von Serge
nein, nicht ganz
Serge hat geschrieben:Wenn ich einen Sound lade, ihn Abspiele und dann nach kurzer Zeit wieder abspiele, wird das erste Abspielen abgebrochen. Dies führt oft zu nicht gerade schönen Soundschnipseln.
Damit meine ich natürlich dass das erste Abspielen des Sounds noch nicht zuende war

Ich will also, dass sich der selbe Sound sozusagen überlagert.
Verfasst: 18.11.2004 22:11
von Kaeru Gaman
also, der bricht wohl ab, weil er halt nur einmal im speicher steht
wenn du sicher bist, dass er sich überschneiden KANN, dann lade doch einfach 2-4 verschiedene sound nummern mit dem gleichen wav, und zähl ne variable hoch, welcher als nächster gestartet wird
braucht natürlich auch mehr speicher, vielleicht hat jemand anders noch ne bessere idee
Verfasst: 18.11.2004 22:23
von Serge
Yoa das wäre sicher auch ne alternative, evtl. sogar besser als die von mir aufgeführte.
Verfasst: 18.11.2004 22:40
von RaVeN99
Solltest du vorhaben 2 sounds - vornehmlich die selben - parallel laufen zu lassen, ohne dass der eine den anderen abbricht oder sonstwas passiert...
Gut gemeinter rat: nimm lieber Fmod...
Ich habs selbst schon versucht, kollega von mir auch, wir haben bisher keine Lösung mit PB bordmitteln gefunden (was nicht heisst dass es keine gibt), und sind deswegen auf Fod umgestiegen...
Willst du das ganze vermarkten solltest du dir mal audiere anguggen...
Beide in jedem fall besser und mit mehr funktionen versehen als die integrierten PB commands.
Mfg
RaVeN
Verfasst: 18.11.2004 23:17
von Serge
Kenne mich mit exthernen Soundengines nicht so aus.
Da ich schon gerne alle Rechte an meinen Projekten haben möchte, käme da wohl nur Audiere in Frage?
Gibt es davon ne Extra library für PB oder wie baut man es ein?
bzw. Kann mir jemand sagen ob die Idee, die ich im ersten Posting aufgeführt habe funktionieren würde?
Verfasst: 19.11.2004 02:00
von Andre
Serge hat geschrieben:Kenne mich mit exthernen Soundengines nicht so aus.
Da ich schon gerne alle Rechte an meinen Projekten haben möchte, käme da wohl nur Audiere in Frage?
Gibt es davon ne Extra library für PB oder wie baut man es ein?
Info von PureArea.net / DLL+Tools: hat geschrieben:DLL-Komplettpaket "Audiere Sound System" mit vielen Beispielen zum Abspielen verschiedenster Musikformate (aiff, mp3, ogg, flac, mod, s3m, xm, it, wave), Erstellen eigener Töne & Geräusche, Effekte u.v.m. - Freeware (LGPL) -
Homepage des Entwicklers
Verfasst: 19.11.2004 08:44
von Lebostein
Da es langsam sehr viele 'User-Libs' und 'DLL's + Tools' (wo ist eigentlich der Unterschied? Auf beiden Seiten findet man z.B. DLL's) in der PureArea gibt, sollte man hier vielleicht auch mal Kategorien (Sound, Grafik...) einführen, denn wenn man zum Beispiel Libs zum Thema Sound sucht, muss man quasi alles durchlesen, auf beiden Seiten (ich bin einfach faul

)
Es reicht ja schon ein kleines Symbol, es muss ja nicht mal ne aufwändige Such- oder Filterfunktion sein... ansonsten kann ich zur Area nur sagen: Wow, was für ne Fundgrube (nicht zu vergessen das Codearchiv)!
Verfasst: 19.11.2004 17:40
von Serge
Hm, ich habe jetzt mal versucht Audiero einzubauen,
aber sobald ich bei einem meiner Soundeffect den Befehl "play()" aufrufe, stürtzt das Programm ab.
Ich habe auch mal versucht den Beispielcode zu verändern.
Code: Alles auswählen
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
SampleSourceObject.sampleSource= AUDIERE_OpenSampleSource(@"wechsel.wav",#FF_AUTODETECT)
If SampleSourceObject=0
MessageRequester("","Error AUDIERE_OpenSampleSource",0):End:EndIf
; open a SoundEffect Object
SoundEffectObject.SoundEffect=AUDIERE_OpenSoundEffect(AudioDeviceObject,SampleSourceObject,#MULTIPLE)
If SoundEffectObject=0
MessageRequester("","Error OpenSound",0):End:EndIf
; /**
; * Trigger playback of the sound. If the SoundEffect is of type
; * single, This plays the sound If it isn't playing yet, and
; * starts it again If it is. If the SoundEffect is of type
; * multiple, play() simply starts playing the sound again.
SoundEffectObject\play() ; play the soundEffect
MessageRequester("","Press OK to play a second sound because the SoundEffect is #MULTIBLE",0)
SoundEffectObject\play() ; play the soundEffect
Funktioniert einwandfrei
Veränderte Version:
Code: Alles auswählen
If OpenLibrary(#audiere,"audiere.dll")=0
MessageRequester("","Error audiere.dll",0):End:EndIf
structure test
SampleSourceObject.sampleSource
SoundEffectObject.SoundEffect
endstructure
dim test.test(0)
; 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
test(0)\SampleSourceObject= AUDIERE_OpenSampleSource(@"wechsel.wav",#FF_AUTODETECT)
If SampleSourceObject=0
MessageRequester("","Error AUDIERE_OpenSampleSource",0):End:EndIf
; open a SoundEffect Object
test(0)\SoundEffectObject=AUDIERE_OpenSoundEffect(AudioDeviceObject,test(0)\SampleSourceObject,#MULTIPLE)
If SoundEffectObject=0
MessageRequester("","Error OpenSound",0):End:EndIf
; /**
; * Trigger playback of the sound. If the SoundEffect is of type
; * single, This plays the sound If it isn't playing yet, and
; * starts it again If it is. If the SoundEffect is of type
; * multiple, play() simply starts playing the sound again.
test(0)\SoundEffectObject\play() ; play the soundEffect
MessageRequester("","Press OK to play a second sound because the SoundEffect is #MULTIBLE",0)
test(0)\SoundEffectObject\play() ; play the soundEffect
Ich habe die Variablen in eine Structur getan.
Jetzt stürtzt das Programm ebenfalls ab.
(erst bei play, das laden und erstellen des sounds geht einwandfrei)
-> Somit kein dynamisches Arbeiten mit den Sounds möglich?
Oder woran könnte es liegen?