android消除迴音
① 手機有迴音怎麼回事
如果您使用的是華為手機,手機通話時有回聲,可以通過以下方法排查操作:
一、通話時聽到自己的回聲
1. 可能是對方手機問題,建議對方切換通話方式(「手持」切「免提」,或「免提」切「手持」)後嘗試。
2. 可能是網路問題,建議開啟VoLTE功能嘗試,或者到信號好的地方重新撥打。
二、通話時對方聽到回聲
1. 可能是本端手機問題,請注意看下是否存在麥克風被遮擋情況,如被手指擋住可能會導致迴音,通過調整手持握姿可解決。
2. 可能是網路問題,建議開啟VoLTE功能嘗試,或者到信號好的地方重新撥打。
如果以上操作後仍無法解決,建議您備份重要數據(微信/QQ等應用需單獨備份),攜帶購機憑證前往華為客戶服務中心檢測。
② 有人用過android 4.1的新API里的AcousticEchoCanceler 回聲消除嗎
下面簡單的備忘下AcousticEchoCanceler的使用方法:
1)判斷當前機型是否支持AEC,需要注意這里的檢查不一定準確。
public static boolean isDeviceSupport()
{
return AcousticEchoCanceler.isAvailable();
}
2)初始化並使能AEC。
private AcousticEchoCanceler canceler;
public boolean initAEC(int audioSession)
{
if (canceler != null)
{
return false;
}
canceler = AcousticEchoCanceler.create(audioSession);
canceler.setEnabled(true);
return canceler.getEnabled();
}
3)使能/去使能AEC。
public boolean setAECEnabled(boolean enable)
{
if (null == canceler)
{
return false;
}
canceler.setEnabled(enable);
return canceler.getEnabled();
}
4)釋放AEC。
public boolean release()
{
if (null == canceler)
{
return false;
}
canceler.setEnabled(false);
canceler.release();
return true;
}
AcousticEchoCanceler的初始化需要一個sessionid,下面簡單的備忘下上層的調用方式:
1)初始化AudioRecord的時候需要處理第一個參數。
if (chkNewDev())
{
audioRecord = new AudioRecord(MediaRecorder.AudioSource.VOICE_COMMUNICATION, frequency, channelIN, audioEncoding, tmpSize);
}else
{
audioRecord = new AudioRecord(MediaRecorder.AudioSource.MIC, frequency, channelIN, audioEncoding, tmpSize);
}
2)初始化好audioRecord之後,就可以通過
audioRecord.getAudioSessionId()
獲取到相應的sessionid。
3)初始化AudioTrack時,也需要額外的處理sessionid。
if (chkNewDev() && audioRecord != null)
{
audioTrack = new AudioTrack(AudioManager.STREAM_VOICE_CALL, frequency, channelOUT, audioEncoding, tmpSize, AudioTrack.MODE_STREAM,audioRecord.getAudioSessionId());
}
else
{
audioTrack = new AudioTrack(AudioManager.STREAM_VOICE_CALL, frequency, channelOUT, audioEncoding, tmpSize, AudioTrack.MODE_STREAM);
}
另外,由於API的限制,需要考慮機型不匹配的情況:
public static boolean chkNewDev()
{
return android.os.Build.VERSION.SDK_INT >= 16;
}
許可權:
<uses-permission android:name="android.permission.RECORD_AUDIO" />
總結:
1)android新版本增加的API AcousticEchoCanceler 可以非常快速的開發出符合VOIP性質的回聲消除程序。但是考慮到各種機型適配,仍然需要第三方的回聲消除程序。這里主要推薦兩個:webrtc裡面的AEC/AECM,speex。
作者成功的在項目中使用了webrtc裡面的回聲消除,感覺效果還可以。
2)作者編寫的上述代碼也只是根據官方的介紹編寫的,由於資料較少,不能保證代碼的正確性。
轉載
③ Android 迴音消除(AcousticEchoCanceler)的使用
迴音消除Google 開發文檔原文:
文檔大致意思:創建android.media.AudioRecord 的對象的時候,可以通過這個對象獲取到一個audio session 的ID(獲取的方法:getAudioSessionId()),這個ID的話在創建AcousticEchoCanceler的時候用到(創建對象:AcousticEchoCanceler.create(audioSessionId)),最後播放音頻的時候(這里是用AudioTrack播放)傳入這個ID就行了。
④ android webrtc 迴音消除使用audiotrack 合適嗎
android webrtc 迴音消除使用audiotrack合適。推薦即構科技,產品可選:實時音視頻、實時語音、互動直播、IM即時通訊。【點擊免費試用,0成本啟動】
WebRTC的代碼結構布局清晰,在「webrtc\moles\audio_processing\aee」目錄下可以找到幾個用於回聲處理GIPS的AEC源文件。然後主要查找每個AEC源文件所關聯的WebRTC代碼,就可找出回聲處理模塊所需要WebRTC相關的源代碼文件和頭文件,這樣就可以將AEC從WebRTC中提取出來單獨使用。為方便使用,將需要這些代碼分成2個模塊,通用音頻處理模塊webRTC_AUDIO和GIPS-AEC模塊。WebRTC—AUDIO模塊中包含AEC源文件運行所依賴的WebRTC音頻處理相關源文件及頭文件,而GIPS—AEC模塊則是WebRTC中專門用於回聲處理GIPS的AEC源文件。GIPS-AEC模塊以WebRTC_AUDIO模塊為基礎,對回聲進行處理。
想要了解更多關於這方面的相關信息,推薦咨詢ZEGO即構科技。ZEGO即構科技是一家全球雲通訊服務商,專注自研音視頻引擎,服務覆蓋全球,鏈接 5 億終端用戶。ZEGO即構科技覆蓋212個國家/地區,全球用戶體驗毫秒級互動,日均通話時長達30億分鍾,躋身雲通訊行業頭部,全方位行業解決方案,滿足百餘個業務場景需要,服務客戶4000家,70%泛娛樂/在線教育客戶的選擇。