方法: XAudio2 での XAPOFX の使用
このトピックでは、XAudio2 エフェクト チェーンの XAPOFX に含まれる効果の 1 つを使用する方法について説明します。
XAudio2 効果チェーンで XAPOFX からの効果を使用するには
XAPOFX 効果の CLSID を CreateFX 関数に渡して、効果を作成します。
この場合、簡略化されたリバーブエフェクトFXReverbが作成されています。
IUnknown * pXAPO; CreateFX(__uuidof(FXReverb),&pXAPO);
XAUDIO2_EFFECT_DESCRIPTOR構造体にデータを設定します。
XAUDIO2_EFFECT_DESCRIPTOR descriptor; descriptor.InitialState = true; descriptor.OutputChannels = 1; descriptor.pEffect = pXAPO;
XAUDIO2_EFFECT_CHAIN構造体にデータを設定します。
XAUDIO2_EFFECT_CHAIN chain; chain.EffectCount = 1; chain.pEffectDescriptors = &descriptor;
SetEffectChain 関数を使用して、効果チェーンを XAudio2 音声に適用します。
pVoice->SetEffectChain(&chain);
Note
また、IXAudio2::CreateSourceVoice、IXAudio2::CreateSubmixVoice、または IXAudio2::CreateMasteringVoice にパラメーターとしてチェーンを渡すことで、音声を作成するときに音声にエフェクト チェーンを適用することもできます。
IUnknown::Release を使用して効果を解放します。 XAPO を作成すると、参照カウントは 1 になります。 SetEffectChain を使用して XAPO が XAudio2 に渡されると、XAudio2 は XAPO の参照カウントをインクリメントします。 クライアントの XAPO への参照を解放すると、XAudio2 は XAPO の所有権を取得できます。 XAudio2 が XAPO への唯一の参照を持つ場合、この参照は XAudio2 によって使用されなくなったときに破棄されます。 クライアント コードで XAPO への参照を維持する必要がある場合 (たとえば、後で再利用する場合など)、この手順はスキップできます。
pXAPO->Release();
効果に関連付けられているパラメーター構造 (存在する場合) を設定します。
この場合、 FXREVERB_PARAMETERS 構造を使用して、リバーブエフェクトで使用する拡散と部屋のサイズを設定します。
FXREVERB_PARAMETERS XAPOParameters; XAPOParameters.Diffusion = FXREVERB_DEFAULT_DIFFUSION; XAPOParameters.RoomSize = FXREVERB_DEFAULT_ROOMSIZE;
エフェクトがアタッチされている音声で SetEffectParameters 関数を呼び出して、エフェクトパラメーター構造をエフェクトに渡します。
hr = pVoice->SetEffectParameters( 0, &XAPOParameters, sizeof( FXREVERB_PARAMETERS ) );
関連トピック