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
- XAudio2学习之SimpleAPO
- XAudio2学习之MonitorAPO
- XAudio2学习之IXAudio2VoiceCallback回调
- XAudio2学习之采样率转换
- XAudio2学习之调节音量
- XAudio2学习之调节音调
- XAudio2学习之混音
- XAudio2学习之流化音频文件
- XAudio2学习
- XAudio2学习一之平台搭建
- XAudio2学习二之获取输出设备数
- XAudio2学习四之wave文件格式
- XAudio2学习六之播放WAV文件
- XAudio2学习七之工程迁移错误
- XAudio2学习之动态添加删除Voice
- XAudio2学习之循环播放音频数据
- XAudio2学习之音效相关结构体
- XAudio2学习之内置音效:混响
- 第4周 C语言及程序设计提高例程-18 一维数组应用二三例
- 机器学习实战之SVD
- 轻松搞定java内存模型(零)总括
- 每个公司、每个社区,都需要不止一个“灵魂人物”。
- 献给调音师、录音师、DJ的音频专业术语英汉对照表
- XAudio2学习之SimpleAPO
- Eclipse搭建SSH框架项目
- MySQL—— Insert record if not exists in table
- 使用itext生成pdf的,各种布局
- linux文件系统 dup dup2函数
- poj 2397(二分+dp)
- location hash(#)
- VS.net中快捷键收缩和展开代码段
- RCurl抓取