如何使用Speex中的AEC模組,提高聲音質量?

2021-08-30 01:30:33 字數 1162 閱讀 5215

在speex(www.speex.org)的最新版本中,開始整合了回音消除的模組,而回音消除一直是voip之中亟待解決的主要問題。

很多朋友和我說speex的aec模組的效能並不好,我們先來看一下speex的aec的api呼叫方式。

/**建立aec物件

*/speexechostate *echo_state = speex_echo_state_init(frame_size, filter_length);

frame_size 的取值最好是乙個編碼的frame大小, 在低頻寬條件下,一般延遲20ms,而大小為160

filter_length,最好是房間內反射時間的1/3

如: 乙個房間的反射時延為300ms

那麼這個filter_length就最好是100ms(這個長度又被稱為tail length).

而其中filter_length的設定是乙個關鍵。

/**執行aec

*/speex_echo_cancel(echo_state, input_frame, echo_frame, output_frame, residue);

其中:input_frame: 就是被音效卡捕捉到的聲音

output_frame 是處理完以後輸出的聲音

residue是乙個可選引數,如果不使用可以將之設定為null, 也可以通過preprocessor 來控制

問題的關鍵是 處理input和echo 之間的關係,

writetosndcard(echo_frame, frame_size)

readfromsndcard(input_frame, frame_size)

speex_echo_cancel(echo_state, input_frame, echo_frame, output_frame, residue)

如果你想要盡可能的減小訊號中的回音,那麼可以將residue這個引數設定為噪音引數.

/**銷毀和復位

*/speex_echo_state_destroy(echo_state);

speex_echo_state_reset(echo_state);

不再複述了!

說明:據說在speex的最新的1.2beta版本上,speex提供了可選擇的,簡化的api,來提高echo執行過程中的同步問題。

這些,我會在以後的文章中在討論。

AE C 如何建立和使用 sde連線

我們通過 arccatalog 工具連線 arcsde 管理的空間資料庫的時候,都會在 arccatalog 中建立乙個 sde 檔案,該檔案為乙個空間資料庫連線檔案,有了這個檔案可以直接連線到空間資料庫中去,那麼在 arcengine 中是如何建立和使用這個 sde 檔案的呢?以下為通過 ae c...

音訊編碼 speex庫的使用方法

一 編碼流程 使用speex的api函式對音訊資料進行壓縮編碼要經過如下步驟 1 定義乙個speexbits型別變數bits和乙個speex編碼器狀態變數enc state。2 呼叫speex bits init bits 初始化bits。3 呼叫speex encoder init speex n...

python怎麼取模 Python中的取模運算方法

所謂取模運算,就是計算兩個數相除之後的餘數,符號是 如a b就是計算a除以b的餘數。用數學語言來描述,就是如果存在整數n和m,其中0 m b,使得a n b m,那麼a b a n b m.取模運算的兩個運算元都必須是整數,可以是負整數,但是b不可以是0,因為被除數不能為0嘛。當a和b中存在負整數時...