如何:在 XAudio2 中使用 XAPOFX

本主题介绍如何在 XAudio2 效果链中使用 XAPOFX 中包含的效果之一。

在 XAudio2 效果链中使用 XAPOFX 的效果

  1. 通过将 XAPOFX 效果的 CLSID 传递给 CreateFX 函数来创建效果。

    在这种情况下,将创建简化的混响效果 FXReverb。

    IUnknown * pXAPO;
    CreateFX(__uuidof(FXReverb),&pXAPO);
    
  2. 使用数据填充 XAUDIO2_EFFECT_DESCRIPTOR 结构。

    XAUDIO2_EFFECT_DESCRIPTOR descriptor;
    descriptor.InitialState = true;
    descriptor.OutputChannels = 1;
    descriptor.pEffect = pXAPO;
    
  3. 使用数据填充 XAUDIO2_EFFECT_CHAIN 结构。

    XAUDIO2_EFFECT_CHAIN chain;
    chain.EffectCount = 1;
    chain.pEffectDescriptors = &descriptor;
    
  4. 使用 SetEffectChain 函数将效果链应用于 XAudio2 语音。

    pVoice->SetEffectChain(&chain);
    

    注意

    在创建语音时,还可以通过将链作为参数传递给 IXAudio2::CreateSourceVoice、IXAudio2::CreateSubmixVoiceIXAudio2::CreateMasteringVoice,将效果链应用于语音。

     

  5. 使用 IUnknown::Release 释放效果。 创建 XAPO 时,它的引用计数为 1。 将 XAPO 传递给具有 SetEffectChain 的 XAudio2 时,XAudio2 将递增 XAPO 上的引用计数。 释放客户端对 XAPO 的引用允许 XAudio2 获取 XAPO 的所有权。 如果 XAudio2 具有对 XAPO 的唯一引用,则当 XAudio2 不再使用该引用时,将释放此引用。 如果客户端代码需要维护对 XAPO 的引用(例如,供以后重复使用),则可以跳过此步骤。

    pXAPO->Release();
    
  6. 填充与效果关联的参数结构(如果有)。

    在这种情况下, FXREVERB_PARAMETERS 结构用于设置混响效果应使用的扩散和房间大小。

    FXREVERB_PARAMETERS XAPOParameters;
    XAPOParameters.Diffusion = FXREVERB_DEFAULT_DIFFUSION;
    XAPOParameters.RoomSize = FXREVERB_DEFAULT_ROOMSIZE;
    
  7. 通过在附加效果的语音上调用 SetEffectParameters 函数,将效果参数结构传递给效果。

    hr = pVoice->SetEffectParameters( 0, &XAPOParameters, sizeof( FXREVERB_PARAMETERS ) );
    

音频效果

XAudio2 编程指南