XAudio2学习之SimpleAPO

来源:互联网 发布:淘宝专卖店怎么开 编辑:程序博客网 时间:2024/04/28 02:07
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

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 高效能人士七个习惯 如何养成良好学习习惯 21天养成一个好习惯 培养孩子的良好习惯 怎样培养孩子的阅读习惯 怎样养成良好的学习习惯 培养孩子的阅读习惯 如何培养学生的良好习惯 如何培养孩子阅读习惯 怎样养成好的学习习惯 怎样培养孩子的学习习惯 培养幼儿的良好习惯 养成良好的阅读习惯 如何培养孩子的习惯 养成良好的学习习惯 如何养成好的学习习惯 怎样养成良好的习惯 怎么养成好的学习习惯 如何养成良好的习惯 养成良好的卫生习惯 怎么培养孩子的习惯 培养孩子好的学习习惯 如何培养幼儿良好的习惯 如何培养好的学习习惯 如何培养学生的学习习惯 如何培养幼儿的学习习惯 让优秀成为一种习惯 小学生数学学习习惯的培养 如何培养孩子的行为习惯 中学生不良学习习惯 优秀孩子的16个习惯 怎样培养学生的学习习惯 高效率人士的七个习惯 怎么培养孩子的学习习惯 如何培养学生学习习惯 如何培养孩子的良好学习习惯 怎样培养孩子好的学习习惯 如何培养学生良好的阅读习惯 如何培养小学生的学习习惯 怎样培养孩子良好的学习习惯 如何培养学生良好的学习习惯