waveOutWrite()
-
Hi!
Auf folgende Frage finde ich leider nirgenst eine Antwort (msdn, google, etc.):
Kann ich per waveOutWrite zwei streams gleichzeitig abspielen? Muss ich dann waveOutOpen 2 mal aufrufen damit ich für jeden stream ein eigenes waveout handle habe (HWAVEOUT)?
Danke für eure Hilfe!
-
Wenn du nicht selbst "mischen" willst, dann musst du 2x waveOutOpen machen, damit du zwei Handles bekommst, ja.
Oder aber du nimmst DirectSound - das ist extra dafür gemacht dass man unterschiedliche Sounds gleichzeitig spielt. Da kann man dann auch dynamisch die Frequenz, die Lautstärke, das Panning etc. pro Sound anpassen - auch alles während die laufen.
-
I tested it with using 2 handles but it's not working. It still plays one stream after the other.
Directsound is not that cool because I don't want to download and install the DX SDK only for the soundoutput.
-
Ok hab in den letzten stunden in msdn gestöbert und bin auf das hier gestoßen:
http://msdn.microsoft.com/en-us/library/ms712134(VS.85).aspx
Die Funktion heißt mixerOpen(), ist das die Lösung? Wenn ich mixerOpen() das Handle das mir von waveOutOpen() zurückgegeben wurde übergebe, wird dann alles automatisch gemixt?
-
IMHO geht das nicht. Du musst selbst die beiden Wave-Buffer mischen.
D.h. Mittelwert aus beiden Sreams bilden.
-
Das geht leider nicht, zumindest nicht einfach. Das Problem ist, die Streams die ausgegeben werden sollen kommen in Echtzeit über das Netzwerk herein (VoIP). Das Problem ist nun die zeitliche Verschiebung:
Paket1 mit 10 ms Sound kommt rein und wird abgespielt. Irgendwann während dieses Paket abgespielt wird kommt Paket2 mit 10ms Sound rein.
(Paket1 und 2 kommen von unterschiedlichen Clients.)D.h. ich müsste das Abspielen des ersten Pakets unterbrechen, die momentane Position herausfinden ab dieser Position den Anfang von Paket2 hinzumischen. Blöderweise geht sich dann Paket2 nicht ganz in Paket1 aus jetzt muss ich den rest von Paket2 auch noch seperat speichern und danach ausgeben.
Ist eine sehr komplizierte Lösung...
-
Dann solltest Du DirectSound verwenden, wie schon empfohlen...
BTW: Wenn die Pakete schon zeitversetzt ankommen, dann nützen Dir zwei Writes auch nicht. Die Pakete bleiben zeitversetzt.
Also kannst Du auch zeitversett einmischen.
-
C_Cheaf schrieb:
Directsound is not that cool because I don't want to download and install the DX SDK only for the soundoutput.
Ja klar DAS ist natürlich ein sehr guter Grund.