前言
若要開發支援雙向通話功能的Novatek iVoT產品,如IP攝影機或是視訊會議系統,通常會遭遇到回聲的困擾,便是遠端麥克風發出的聲音,傳到本地端由本機的喇叭發出後,又迴授到本機的麥克風而造成回聲的現象,此時可透過AudioLib的協助,用軟體的方式讓iVoT的設備可以支援Acoustic Echo Cancellation(AEC)的功能。
AudioLib
AudioLib是一個開放原始碼的函式庫,存放在GitHub,其中包含數個聲音相關的函式庫與編解碼器等,而Acoustic Echo Cancellation也包含在內,其背後的功能實現是奠基於另外一套開源函式庫speex,但是重新包裝讓使用者更方便使用。
其中AEC相關的功能,可以參考其中的AEC資料夾,裡面有所需的header files、source files與範例程式。
編譯與建置
按照說明文件”Audio codec library user guide.pdf”的說明,將特定資料夾複製至Novatek SDK的對應資料夾中,再於SDK中執行make指令,便可以編譯函式庫,並自動於編譯完成後將函式庫複製至SDK的輸出資料夾中,方便專案的整合。
範例說明
專案中的將編譯完成的函式庫與測試檔案,複製到EVB上,其中測試檔案說明如下
- aec_mic.pcm:為麥克風所接收到的訊號
- aec_speaker.pcm:為喇叭所發出的聲音
- aec_output.pcm:為進行AEC處理後的結果
函式使用時,需先指定以下參數
- SAMPLING_RATE:聲音採樣率,範例中設為8k
- NN:每次送入的audio frame中有多少個sample
- TAIL:adaptive impulse response的長度
- NUM_MIC:麥克風的數量
- NUM_SPEAKER:喇叭的數量
- CH:聲道數
將各參數設置到對應的成員變數中
執行AUD_AEC_PreInit()
,API會計算函式庫所需的記憶體大小並配置
接下來是初始化函式庫,並設定AEC相關參數
後續便是依序讀取pcm檔案的內容,並輸入至API中處理,最後將結果輸出於output檔案。
執行結果
執行aec_test
程式後,會出現選單,再輸入e便可執行AEC的測試,過程的中顯示的訊息如下:
使用分析軟體可以發現,以下為喇叭發出的聲音
會對麥克風採集到的說話聲造成影響
但是在透過AEC處理後,便可以順利消除喇叭的影響,只留下應該採集到的人聲部分
評論