So wird's gemacht: Verwenden von XAPOFX in XAudio2
In diesem Thema erfahren Sie, wie Sie einen der in XAPOFX enthaltenen Effekte in einer XAudio2-Effektkette verwenden.
So verwenden Sie einen Effekt von XAPOFX in einer XAudio2-Effektkette
Erstellen Sie den Effekt, indem Sie die CLSID eines XAPOFX-Effekts an die CreateFX-Funktion übergeben.
In diesem Fall wird der vereinfachte Halleffekt FXReverb erstellt.
IUnknown * pXAPO; CreateFX(__uuidof(FXReverb),&pXAPO);
Füllen Sie eine XAUDIO2_EFFECT_DESCRIPTOR-Struktur mit Daten auf.
XAUDIO2_EFFECT_DESCRIPTOR descriptor; descriptor.InitialState = true; descriptor.OutputChannels = 1; descriptor.pEffect = pXAPO;
Füllen Sie eine XAUDIO2_EFFECT_CHAIN-Struktur mit Daten auf.
XAUDIO2_EFFECT_CHAIN chain; chain.EffectCount = 1; chain.pEffectDescriptors = &descriptor;
Wenden Sie die Effektkette mit der SetEffectChain-Funktion auf eine XAudio2-Stimme an.
pVoice->SetEffectChain(&chain);
Hinweis
Sie können auch eine Effektkette auf eine Stimme anwenden, wenn Sie die Stimme erstellen, indem Sie die Kette als Parameter an IXAudio2::CreateSourceVoice, IXAudio2::CreateSubmixVoice oder IXAudio2::CreateMasteringVoice übergeben.
Lassen Sie den Effekt mit IUnknown::Release frei. Wenn Sie ein XAPO erstellen, weist er die Referenzanzahl 1 auf. Wenn das XAPO mit SetEffectChain an XAudio2 übergeben wird, erhöht XAudio2 die Verweisanzahl auf dem XAPO. Durch das Freigeben des Verweises des Clients auf das XAPO kann XAudio2 den Besitz des XAPO übernehmen. Wenn XAudio2 den einzigen Verweis auf das XAPO hat, wird dieser Verweis verworfen, wenn er von XAudio2 nicht mehr verwendet wird. Wenn der Clientcode einen Verweis auf das XAPO beibehalten muss , z. B. für die spätere Wiederverwendung, können Sie diesen Schritt überspringen.
pXAPO->Release();
Füllen Sie ggf. die dem Effekt zugeordnete Parameterstruktur auf.
In diesem Fall wird die FXREVERB_PARAMETERS-Struktur verwendet, um die Diffusions- und Raumgröße festzulegen, die der Halleffekt verwenden soll.
FXREVERB_PARAMETERS XAPOParameters; XAPOParameters.Diffusion = FXREVERB_DEFAULT_DIFFUSION; XAPOParameters.RoomSize = FXREVERB_DEFAULT_ROOMSIZE;
Übergeben Sie die Effektparameterstruktur an den Effekt, indem Sie die SetEffectParameters-Funktion für die Stimme aufrufen, an die der Effekt angefügt ist.
hr = pVoice->SetEffectParameters( 0, &XAPOParameters, sizeof( FXREVERB_PARAMETERS ) );
Zugehörige Themen