首页 > 其他 > 详细

XAudio2学习之SimpleAPO

时间:2016-04-22 20:23:01      阅读:189      评论:0      收藏:0      [点我收藏+]
SimpleAPO通过与处理的样本数据相乘,应用一个简单的增益因子到音频数据。DirectX SDK中带了示例,我将其中的实例进行拆分后,来分开进行说明,也是将代码分离开。
struct SimpleAPOParams
{
    float gain;
};

class __declspec( uuid("{5EB8D611-FF96-429d-8365-2DDF89A7C1CD}")) 
CSimpleAPO 
: public CSampleXAPOBase<CSimpleAPO, SimpleAPOParams>
{
public:
    CSimpleAPO();
    ~CSimpleAPO();

    void DoProcess( const SimpleAPOParams&, FLOAT32* __restrict pData, UINT32 cFrames, UINT32 cChannels );
};

CSimpleAPO派生自一个模板类CSampleXAPOBase,位于文件SampleAPOBase.h中。模板类实例化时需要提供XAPO类和参数类:APOClass和ParameterClass。参数类可以是结构体。

模板类实现了静态实例化函数CreateInstance,以及LockForProcess和Process接口函数。并预留了一个纯虚函数DoProcess来让子类实现不同的需求。

LockForProcess函数只是进行了获取格式:

 memcpy( &m_wfx, pInputLockedParameters[0].pFormat, sizeof( WAVEFORMATEX ) );
Process函数实现了如果输入缓冲区的标志位是XAPO_BUFFER_SILENT,将缓冲区置为0.如果为XAPO_BUFFER_VALID,表示数据有效,调用DoProcess来将数据进行增益:

 ParameterClass* pParams;
    pParams = (ParameterClass*)BeginProcess();
    if ( pInputProcessParameters[0].BufferFlags == XAPO_BUFFER_SILENT )
    {
        memset( pInputProcessParameters[0].pBuffer, 0,
                pInputProcessParameters[0].ValidFrameCount * m_wfx.nChannels * sizeof(FLOAT32) );

        DoProcess(
            *pParams,
            (FLOAT32* __restrict)pInputProcessParameters[0].pBuffer,
            pInputProcessParameters[0].ValidFrameCount,
            m_wfx.nChannels );
    }
    else if( pInputProcessParameters[0].BufferFlags == XAPO_BUFFER_VALID )
    {
        DoProcess(
            *pParams,
            (FLOAT32* __restrict)pInputProcessParameters[0].pBuffer,
            pInputProcessParameters[0].ValidFrameCount,
            m_wfx.nChannels );
    }
    EndProcess();
其中BeginProcess接口可以获取最新的通过SetEffectParameters设置的参数。XAPO只能在Process函数内调用这个方法。

EndProcess告诉CXAPOParametersBase,XAPO已经完成了接收设置的最新的参数。此方法也必须在Process方法内调用。


交流QQ:1245178753

本文地址:http://blog.csdn.net/u011417605/article/details/51201686

示例代码下载:http://download.csdn.net/detail/u011417605/9497124

XAudio2学习之SimpleAPO

原文:http://blog.csdn.net/u011417605/article/details/51201686

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!