1. 程式人生 > >微軟聲學回聲消除demo AECMicArray的使用

微軟聲學回聲消除demo AECMicArray的使用

        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

        從上圖及主觀聽覺的結果來看,微軟的回聲消除效果很好,幾乎聽不見系統播放出來的聲音。