如何:在 XAudio2 中使用 XAPO

本主题介绍如何在 XAudio2 效果链中使用 XAPO API 创建的效果。

  1. 按照如何:创建 XAPO 中所述 创建 XAPO

    还可以实现运行时参数功能,如 如何:向 XAPO 添加运行时参数支持中所述。

  2. 创建 XAPO 的实例。

    IUnknown * pXAPO;
    pXAPO = new SimpleXAPO();
    
  3. 使用数据填充 XAUDIO2_EFFECT_DESCRIPTOR 结构。

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

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

    pVoice->SetEffectChain(&chain);
    

    注意

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

     

  6. 使用 IUnknown::Release 释放效果。

    创建 XAPO 时,它的引用计数为 1。 将 XAPO 传递给具有 SetEffectChain 的 XAudio2 时,XAudio2 将递增 XAPO 上的引用计数。 释放客户端对 XAPO 的引用允许 XAudio2 获取 XAPO 的所有权。 如果 XAudio2 具有对 XAPO 的唯一引用,则在 XAudio2 不再使用它时将释放它。 例如,如果客户端代码需要保留对 XAPO 的引用以供以后重复使用,则应跳过此步骤。

    pXAPO->Release();
    
  7. 填充与效果关联的参数结构(如果有)。 在本例中,应应用效果的全强度百分比。

    XAPO_PARAMETERS XAPOParameters;
    XAPOParameters.Level = 0.75;
    
  8. 通过在附加效果的语音上调用 SetEffectParameters 函数,将效果参数结构传递给效果。

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

音频效果

XAPO 概述

XAudio2 编程指南