如何:在 XAudio2 中使用 XAPOFX
本主题介绍如何在 XAudio2 效果链中使用 XAPOFX 中包含的效果之一。
在 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);
注意
在创建语音时,还可以通过将链作为参数传递给 IXAudio2::CreateSourceVoice、IXAudio2::CreateSubmixVoice 或 IXAudio2::CreateMasteringVoice,将效果链应用于语音。
使用 IUnknown::Release 释放效果。 创建 XAPO 时,它的引用计数为 1。 将 XAPO 传递给具有 SetEffectChain 的 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 ) );
相关主题