Novatek iVoT 平台使用Automatic Gain Control功能

關鍵字 :NovatekAGCAudio

前言

在使用Novatek iVoT平台開發有播放聲音功能的產品,例如視訊會議系統時,經常會出現以下情況:
由於每位發言者的說話習慣不同,有的講話較大聲,有的較小聲,有些人喜歡與麥克風距離近些,也有人習慣距離遠一點,這些差異會導致在輸出端的音量幅度有巨大的差異。

此時可透過AudioLib的協助,用軟體的方式讓iVoT的設備可以支援Automatic Gain Control(AGC)的功能,對每個人的聲音進行增益補償,以確保系統輸出端維持在一個較為恆定的音量。


AudioLib

AudioLib是一個開放原始碼的函式庫,存放在GitHub,其中包含數個聲音相關的函式庫與編解碼器等,而Acoustic Echo Cancellation也包含在內,其背後的功能實現是奠基於另外一套開源函式庫speex,但是重新包裝讓使用者更方便使用。



其中AGC相關的功能,包含在AEC的功能中,可以參考其中的AEC資料夾,裡面有所需的header files、source files與範例程式。


編譯與建置

按照說明文件”Audio codec library user guide.pdf”的說明,將特定資料夾複製至Novatek SDK的對應資料夾中,再於SDK中執行make指令,便可以編譯函式庫,並自動於編譯完成後將函式庫複製至SDK的輸出資料夾中,方便專案的整合。AGC的功能包含在AEC的lib中,因此我們需將AEC的相關檔案複製到SDK中。

範例說明

將專案中編譯完成的函式庫與測試檔案,複製到EVB上,其中AGC的部分請參考aec_test.c中的main_AGC(),內容說明如下:

  • agc_in.pcm:為原始要播放的聲音訊號
  • agc_output.pcm:為進行AGC處理後的結果

函式使用時,需先指定以下參數

  • SAMPLING_RATE:聲音採樣率,範例中設為8k
  • NN:每次送入的audio frame中有多少個sample
  • CH:聲道數



將各參數設置到對應的成員變數中,並執行AUD_AGC_PreInit(),API會計算函式庫所需的記憶體大小並配置之。



接下來是初始化函式庫並設定AGC相關參數。


其中參數說明如下

  • EN_AUD_AGC_AGC - 開啟/關閉AGC功能
  • EN_AUD_AGC_DENOISE - 開啟/關閉降噪功能
  • EN_AUD_AGC_NOISE_SUPPRESS - 降噪強度
  • EN_AUD_AGC_AGC_LEVEL - AGC強度
  • EN_AUD_AGC_AGC_MAX_GAIN - 最大GAIN值

後續便是依序讀取pcm檔案的內容並輸入至API中處理,最後將結果輸出於output檔案。

執行結果

執行aec_test程式後,會出現選單,再輸入a便可執行AGC的測試,過程的中顯示的訊息如下:



使用分析軟體可以發現,原本波形中音量過大的部分,在經過AGC處理後被抑制較小,其中的雜訊也被denoise的功能所消除,我們可以得到一段較乾淨且更不刺耳的聲音。


參考資料

https://www.speex.org/

https://github.com/AITg-ADC/AudioLib

★博文內容均由個人提供,與平台無關,如有違法或侵權,請與網站管理員聯繫。

★文明上網,請理性發言。內容一周內被舉報5次,發文人進小黑屋喔~

參考來源

評論