XAudio2-Audioeffekte
Ein Audioeffekt ist ein Objekt, das eingehende Audiodaten akzeptiert und einige Vorgänge für die Daten ausführt, bevor sie übergeben werden. Sie können einen Effekt verwenden, um eine Vielzahl von Aufgaben auszuführen, z. B. das Hinzufügen von Halleffekten zu einem Audiodatenstrom und die Überwachung der Spitzenlautstärken.
Effektketten
Jede XAudio2-Stimme kann eine Kette von Audioeffekten hosten. Sie können ein Array von XAUDIO2_EFFECT_DESCRIPTOR Strukturen verwenden, um Effektketten anzugeben. Jeder Deskriptor enthält einen Zeiger auf ein Effektobjekt, das vom Client bereitgestellt wird. Diese Objekte müssen die APO-Schnittstellen (Audio Processing Object) implementieren. Weitere Informationen zum APO-Modell finden Sie im XAPO Overview.
Effektketten können vom Client dynamisch geändert werden (während das XAudio2-Modul ausgeführt wird), Effekte können einzeln aktiviert oder deaktiviert werden, und Effektparameter können geändert werden – alle ohne Unterbrechung des Audios. Wenn sich ein Aspekt des Effektdiagramms ändert, optimiert XAudio2 das Diagramm erneut, um unnötige Verarbeitung zu vermeiden. Siehe IXAudio2Voice::SetEffectChain, IXAudio2Voice::EnableEffectund IXAudio2Voice::SetEffectParameters.
Nachdem ein Effekt an eine XAudio2-Stimme angefügt wurde, übernimmt XAudio2 die Steuerung des Effekts, und der Client sollte keine weiteren Aufrufe daran tätigen. Die einfachste Möglichkeit, um sicherzustellen, dass alle Zeiger auf den Effekt losgelassen werden.
Die Effekte in einer bestimmten XAudio2-Effektkette müssen Gleitkommaaudio bei der Verarbeitungsamplingrate dieser Stimme verbrauchen und erzeugen. Der einzige Aspekt des Audioformats, den sie ändern können, ist die Kanalanzahl (z. B. kann ein Halleffekt Monodaten in 5.1 konvertieren). Der Client kann die XAUDIO2_EFFECT_DESCRIPTORverwenden.OutputChannels Feld, um die Anzahl der Kanäle anzugeben, die jeder Effekt erzeugen soll. Die Effektkette schlägt fehl, wenn eines der Effekte diese Anforderungen nicht erfüllen kann oder wenn ein Effekt eine Reihe von Kanälen erzeugt, die der nächste Effekt nicht verarbeiten kann. Alle IXAudio2Voice::EnableEffect oder IXAudio2Voice::D isableEffect Aufrufe, die dazu führen, dass die Effektkette nicht mehr erfüllt, schlägt fehl.
APO-Schnittstellen, die in XAudio2 verwendet werden, müssen destruktivensein. Dies bedeutet, dass sie alle Daten, die sie in ihren Ausgabepuffern finden, immer überschreiben. Andernfalls ist das resultierende Audio möglicherweise falsch, da XAudio2 keine Garantie dafür übernimmt, dass diese Puffer zuvor mit Stille initialisiert wurden.
Integrierte XAudio2-Effekte
In der folgenden Tabelle sind die integrierten Audioeffekte aufgeführt, die von XAudio2 und deren Erstellungsmethoden bereitgestellt werden.
Effekt | Creation-Methode |
---|---|
Hall | XAudio2CreateReverb- |
Lautstärkemesser | XAudio2CreateVolumeMeter |
Ein Beispiel zum Erstellen und Verwenden einer Instanz eines Audioeffekts finden Sie unter How to: Create an Effect Chain.
Benutzerdefinierte Effekte in XAudio2
Die XAPO--API bietet ein Framework zum Erstellen von benutzerdefinierten Audioeffekten, die Sie in XAudio2 verwenden können. Ein Beispiel zum Erstellen eines benutzerdefinierten Effekts mit XAPO finden Sie unter How to: Create an XAPO.
XAPO-Effektbibliothek (XAPOFX)
XAPOFX- stellt eine zusätzliche Bibliothek von XAPOs und einen allgemeinen Mechanismus zum Erstellen bereit. Ein Beispiel für die Verwendung von XAPOFX mit XAudio2 finden Sie unter How to: Use XAPOFX in XAudio2.
Verwandte Themen