[XAudio2] Source Voice pro Klang?
Verfasst: 05.11.2013, 19:00
Hi,
Ich habe noch nicht viel mit Audioprogrammierung gemacht und befummle hier XAudio2.
XAudio2 nutzt das Prinzip von Voices. Source Voices dekodieren dabei ein Quellmedium (z.B. eine WAV- oder WMA-Datei) und leiten den Klang an die Mastering Voice weiter, wo alle Klänge vermischt und schließlich zur Audio-Hardware geschickt werden.
Nun bin ich ein wenig unsicher, wie viele Source Voices ich erzeugen und wie ich sie verteilen soll.
Sagen wir, ich habe Klangdateien für quietschende Reifen und rauschenden Wind. Rein intuitiv würde ich nun fünf Source Voices anlegen: Vier für je einen quietschenden Reifen, und eine für rauschenden Wind. Wenn ein Reifen zu quietschen beginnt, schalte ich seine Quietsch-Source Voice ein; wenn er aufhört, schalte ich sie ab. Der Wind rauscht die ganze Zeit, nur unterschiedlich laut. Füge ich ein zweites Auto hinzu, bekommt auch das wieder vier Source Voices für quietschende Reifen. Wenn ich das so mache, werde ich am Ende um die hundert Source Voices haben (quasi eine für jede Klangquelle), wovon aber nur rund zehn gleichzeitig aktiv sind.
Das ist für mich sehr einfach, aber benutze ich sie damit richtig? Oder sollte ich lieber (aber leider viel komplizierter) einen Pool von zehn Source Voices anlegen, und die Klangdateien dynamisch zuweisen; je nachdem, welche ich gerade brauche? Ist so ein inflationärer Gebrauch von Source Voices in Ordnung, so lange sie brach liegen (wie bei Texturen in Direct3D)? Oder sind das extrem teure Ressourcen, deren pure Existenz die Maschine ausbremst, und die man unbedingt auf ein Minimum begrenzt nutzen sollte?
Mit verwirrtem Gruß
Nachtrag: Die MSDN erwähnt
Ich habe noch nicht viel mit Audioprogrammierung gemacht und befummle hier XAudio2.
XAudio2 nutzt das Prinzip von Voices. Source Voices dekodieren dabei ein Quellmedium (z.B. eine WAV- oder WMA-Datei) und leiten den Klang an die Mastering Voice weiter, wo alle Klänge vermischt und schließlich zur Audio-Hardware geschickt werden.
Nun bin ich ein wenig unsicher, wie viele Source Voices ich erzeugen und wie ich sie verteilen soll.
Sagen wir, ich habe Klangdateien für quietschende Reifen und rauschenden Wind. Rein intuitiv würde ich nun fünf Source Voices anlegen: Vier für je einen quietschenden Reifen, und eine für rauschenden Wind. Wenn ein Reifen zu quietschen beginnt, schalte ich seine Quietsch-Source Voice ein; wenn er aufhört, schalte ich sie ab. Der Wind rauscht die ganze Zeit, nur unterschiedlich laut. Füge ich ein zweites Auto hinzu, bekommt auch das wieder vier Source Voices für quietschende Reifen. Wenn ich das so mache, werde ich am Ende um die hundert Source Voices haben (quasi eine für jede Klangquelle), wovon aber nur rund zehn gleichzeitig aktiv sind.
Das ist für mich sehr einfach, aber benutze ich sie damit richtig? Oder sollte ich lieber (aber leider viel komplizierter) einen Pool von zehn Source Voices anlegen, und die Klangdateien dynamisch zuweisen; je nachdem, welche ich gerade brauche? Ist so ein inflationärer Gebrauch von Source Voices in Ordnung, so lange sie brach liegen (wie bei Texturen in Direct3D)? Oder sind das extrem teure Ressourcen, deren pure Existenz die Maschine ausbremst, und die man unbedingt auf ein Minimum begrenzt nutzen sollte?
Mit verwirrtem Gruß
Nachtrag: Die MSDN erwähnt
Das deute ich in die Richtung, dass sie auf inflationären Gebrauch ausgelegt sind …IXAudio2::CreateSourceVoice method hat geschrieben:XAudio2 uses an internal memory pooler for voices with the same format. This means memory allocation for voices will occur less frequently as more voices are created and then destroyed. To minimize just-in-time allocations, a title can create the anticipated maximum number of voices needed up front, and then delete them as necessary. Voices will then be reused from the XAudio2 pool.