您的位置:首页 > 其它

微软声学回声消除demo AECMicArray的使用

2015-12-26 13:38 218 查看
AECMicArray基于Core Audio APIs,用MMDevice、WASAPI、DeviceTopology和EndpointVolume APIs来捕获高质量声音流。这个例子支持声学回声消除(AEC)和麦克风阵列处理。关于麦克风阵列处理,主要是波束形成和声源定位,具体的在以后总结。

1、说明

AECMicArray有如下特征:用MMDevice来枚举和选择多媒体设备;用WASAPI来管理音频流操作如开始和结束音频流;用DeviceTopology来枚举音频适配器;用EndpointVolume来控制声音级别。

2、要求

AECMicArray要求Windows SDK(Windows Vista及以后版本)和Visual Studio(2005版本以后)。

3、源码下载

AECMicArray代码位于\Program Files\Microsoft SDKs\Windows\v7.0\Samples\multimedia\audio\aecmicrray目录下,源代码包括4个文件,分别是mediabuf.h、AecKsBinder.h、AecKsBinder.cpp、AecSDKDemo.cpp。

4、构建项目

msdn上说明可以分以下四步:

1)打开SDK命令行窗口,即开始——>所有程序——>Microsoft Windows SDK 7.0——>CMD Shell,如下图:



提示中说VC++编译器当前使用的是Windows SDK v6.0A,所以输入WindowsSdkVer.exe -version:v7.0来使用Windows SDK v7.0,输入后会有如下结果:



2)输入cd %MSSDK%\Setup,如下图



3)运行VCIntegrate.exe。以上3步设置了使用SDK的环境。我的电脑中就没有VCIntegrate.exe,可能被破坏,需要修复,比较麻烦。

4)构建示例,成功后会生成AecSDKDemo.exe。

上面是msdn中说的步骤,也可以在VS2010中新建一个工程,然后将4个源文件加进去,然后编译运行生成AecSDKDemo.exe,具体注意事项及代码说明可参见aecmicarray目录里AecSDKDemo.cpp中的说明及readme.rtf文件。

5、执行示例

成功生成AecSDKDemo.exe文件后在命令行窗口中输入一下指令:

AecSDKDemo -out mic_out.pcm -mod system_mod [-option value]

其中-out和-mod是必选项,-out指定存储处理后的数据的pcm格式文件,-mod指定模式,目前demo支持4种模式,及仅AEC(0)、仅MicArray(2)、AEC+MicArray(4)和既没有AEC也没有MicArray(5)。-option是可选参数,具体参见readme.rtf。

6、测试结果

因为仅测试AEC,所以选择模式0,并开启噪声抑制和自动增益控制,同时设置运行时间为40s,即输入AecSDKDemo -out micout.pcm -mod 0 -ns 1 -agc 1 -duration 40,如果仅有一个录音设备和一个播放设备,程序会默认使用这些设备,否则会提示你进行选择。因为只能产生回声消除处理后的数据,所以我们在运行程序的同时,开启录音机,得到麦克风采集到的混合音频,与程序输出对比,如下图:



NearEnd.wav



out.pcm

从上图及主观听觉的结果来看,微软的回声消除效果很好,几乎听不见系统播放出来的声音。

注:http://blog.csdn.net/yjjat1989/article/details/20372589
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: