1. 程式人生 > >基於Android的SIP電話-----Speex 迴音消除 在android 平臺

基於Android的SIP電話-----Speex 迴音消除 在android 平臺

我的畢業論文題目是: 基於Android的移動VoIP高清視訊通話系統的設計與實現

可以去CNKI下載察看,希望對大家有幫助

搞了將近一個月的時間,將Speex的編碼和解碼做好了,發現還不錯。

參考API,又嘗試了迴音消除,發現最新版還提供了用於在多執行緒中的playback()和capture(),有了這兩個函式,就可以避免線上程中不能同步的問題。

結果,發現雖然進行了迴音有了部分消除,但是,還是會一點嘯叫以及回聲,想來還是要做一點處理,譬如去噪,減小播放或者來音的增益。

在使用了speex提供的 preprocessor 函式後 ,原以為會更好的消除噪聲,可視發現也沒什麼變化,反而可能會更弱,這是為什麼

Update:5//12

在使用了Speex回聲消除之後,以及添加了預處理的一些Api,並且優化了程式的結構,例如在接收資料然後用來播放的過程中,使用了Ringbuffer來保證資料包處理質量。

最後的結果:

1兩個手機都開啟揚聲器 且放到最大,在不同的房間裡,能夠聽到一聲回聲,即……喂

2兩個手機不開揚聲器,正常通話音量,在不同的房間裡,沒有回聲。

因為最近比較忙,在做android上,Sip的實現內容,所以沒時間貼出具體的語音處理傳送專案的實現原理和步驟,等過段時間一定補上,如果有疑問,我也儘量回答

Update: 3/11

前幾天,試了一下,把預處理裡面的幾個語音預處理功能都打開了,譬如去噪,VAD,結果發現確實效果不錯,在沒有人音的時候,確實噪聲被去掉了,不過,

以前沒有延時,因為加了很多處理,所以增加了開銷,所以有了500ms的延時(或許吧)。 迴音還是會有一點,可能還是引數設定和同步佇列的問題。期待解決

Update: 12/8/2012 

很多朋友加我QQ詢問是否可以提供SPEEX迴音消除的程式碼或者如何使用迴音消除,很抱歉,最近由於在寫論文,因此沒有時間回答各位的問題,等我將論文搞定,會把相關的設計思路與使用方法公佈於網上,以供大家學習與交流,如果有問題,希望以郵件給來信,將問題寫清楚,我會認真回覆的

UPDATE: 3/8/2013

因為畢設已經完成,論文也送審了,所以,實現諾言,將我的程式碼共享。共享的專案為SIP電話,包含JSIP協議棧、語音編碼庫(G.711、G.722、Speex),語音處理(Speex)。程式碼僅做測試與研究所用,如果有疑問,歡迎大家一起討論

“本著越是容易得到越不珍惜的道理,我不直接放地址了,請你們留言留下郵箱,或者致信給我”

使用方法:首先點選init按鈕,負責初始化SIP,接著可以註冊SIP賬戶,選擇呼叫對方使用者,當對方接通,然後就可以開啟MediaService,呼叫語音服務,進行語音通訊

UPDATE:5/13/2013

最近受到了很多同學和朋友對本專案的關注,專案本身也是基於各個開源專案,本人才疏學淺,在實現過程中,難免有很多疏漏,對於本專案在所有的機型上面也未做過測試,僅在MOTO XT910上實現,區域網下可實時通話,對於迴音也有了一定消除,現在收集到了一些問題,供大家參考,如果有答案,希望能夠提供,本專案將於下月再次開放地址。

問題1 : 時延問題

問題2 :長時間通話斷開  : linklist 非執行緒安全,建議使用ConcurrentLinkedQueue 。感謝Shawn4com的提出

問題3: 斷續(choppy)

問題4: 當螢幕關閉,則問題3消失

如果您覺得我的工作對您有幫助,支援我的開源分享,請為我留言或捐助(1元也是支援)