XAudio2-Audioeffekte
Ein Audioeffekt ist ein Objekt, das eingehende Audiodaten akzeptiert und einen Vorgang für die Daten ausführt, bevor er sie weitergibt. Sie können einen Effekt verwenden, um eine Vielzahl von Aufgaben auszuführen, einschließlich dem Hinzufügen von Hall zu einem Audiostream und der Überwachung von 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 vom Client bereitgestelltes Effektobjekt. Diese Objekte müssen die APO-Schnittstellen (Audio Processing Object) implementieren. Weitere Informationen zum APO-Modell finden Sie in der XAPO-Übersicht .
Effektketten können vom Client dynamisch geändert werden (während die XAudio2-Engine ausgeführt wird), Effekte können einzeln aktiviert oder deaktiviert werden, und Effektparameter können geändert werden – alles 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::EnableEffect und IXAudio2Voice::SetEffectParameters.
Nachdem ein Effekt an eine XAudio2-Stimme angefügt wurde, übernimmt XAudio2 die Kontrolle über den Effekt, und der Client sollte keine weiteren Aufrufe tätigen. Die einfachste Möglichkeit, dies sicherzustellen, besteht darin, alle Zeiger auf den Effekt freizugeben.
Die Effekte in der Effektkette einer bestimmten XAudio2-Stimme müssen Gleitkommaaudio mit der Abtastrate dieser Stimme nutzen und erzeugen. Der einzige Aspekt des Audioformats, das sie ändern können, ist die Kanalanzahl (z. B. kann ein Halleffekt Monodaten in 5.1 konvertieren). Der Client kann die XAUDIO2_EFFECT_DESCRIPTOR verwenden. OutputChannels-Feld , um die Anzahl der Kanäle anzugeben, die jeder Effekt erzeugen soll. Die Effektkette schlägt fehl, wenn einer 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 diese Anforderungen nicht mehr erfüllt, schlagen fehl.
APO-Schnittstellen, die in XAudio2 verwendet werden, müssen destruktiv sein. Dies bedeutet, dass sie immer alle Daten überschreiben, die sie in ihren Ausgabepuffern finden. Andernfalls ist das resultierende Audio möglicherweise falsch, da XAudio2 keine Garantie dafür gibt, dass diese Puffer zuvor still initialisiert wurden.
Integrierte XAudio2-Effekte
In der folgenden Tabelle sind die von XAudio2 bereitgestellten integrierten Audioeffekte und deren Erstellungsmethoden aufgeführt.
Auswirkung | Erstellungsmethode |
---|---|
Reverb | XAudio2CreateReverb |
Lautstärkemessgerät | XAudio2CreateVolumeMeter |
Ein Beispiel für das Erstellen und Verwenden eines instance eines Audioeffekts finden Sie unter Vorgehensweise: Erstellen einer Effektkette.
Benutzerdefinierte Effekte in XAudio2
Die XAPO-API bietet ein Framework zum Erstellen benutzerdefinierter Audioeffekte, die Sie in XAudio2 verwenden können. Ein Beispiel zum Erstellen eines benutzerdefinierten Effekts mit XAPO finden Sie unter Vorgehensweise: Erstellen eines XAPO.
XAPO-Effektbibliothek (XAPOFX)
XAPOFX stellt eine zusätzliche Bibliothek mit XAPOs und einen gängigen Mechanismus für deren Erstellung bereit. Ein Beispiel für die Verwendung von XAPOFX mit XAudio2 finden Sie unter Vorgehensweise: Verwenden von XAPOFX in XAudio2.
Zugehörige Themen