生活随笔
收集整理的這篇文章主要介紹了
AudioEffect
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
AudioEffect這個類現(xiàn)在支持當(dāng)捕獲到音頻時額外的的音頻預(yù)處理類型:
作為聲學(xué)回聲消除器(AEC)的AcousticEchoCanceler這個類消除了從遠程捕捉到音頻信號上的信號的作用。
作為自動增益控制(AGC)的AutomaticGainControl這個類自動恢復(fù)正常捕獲的信號輸出。
作為噪聲抑制器的(NS)的NoiseSuppressor這個類可以消除被捕獲信號的背景噪音。
您可以應(yīng)用這些利用AudioEffect一個子類的AudioRecord類上的音頻捕獲預(yù)處理效果。
注意:并不能保證所有的設(shè)備都能支持這些效果的,所以你應(yīng)該首先調(diào)用在對應(yīng)音頻效果類上的isAvailable()的方法來檢測它的可用性。
?
Android在4.1(API level 16)的時候增加了一個API:AcousticEchoCanceler。
官方對此的介紹:【 http://developer.android.com/reference/android/media/audiofx/AcousticEchoCanceler.html?】
AcousticEchoCanceler 繼承自【 AudioEffect 】
?
?
- 1?下面簡單的備忘下AcousticEchoCanceler的使用方法:
- 2?AcousticEchoCanceler的初始化需要一個sessionid,下面簡單的備忘下上層的調(diào)用方式:
- 3?總結(jié):
下面簡單的備忘下AcousticEchoCanceler的使用方法:
1)判斷當(dāng)前機型是否支持AEC,需要注意這里的檢查不一定準(zhǔn)確。
| public?static?boolean?isDeviceSupport() |
| ????????return?AcousticEchoCanceler.isAvailable(); |
2)初始化并使能AEC。
| private?AcousticEchoCanceler canceler; |
| public?boolean?initAEC(int?audioSession) |
| ????if?(canceler !=?null) |
| ????canceler = AcousticEchoCanceler.create(audioSession); |
| ????canceler.setEnabled(true); |
| ????return?canceler.getEnabled(); |
3)使能/去使能AEC。
| public?boolean?setAECEnabled(boolean?enable) |
| ????if?(null?== canceler) |
| ????canceler.setEnabled(enable); |
| ????return?canceler.getEnabled(); |
4)釋放AEC。
| ????if?(null?== canceler) |
| ????canceler.setEnabled(false); |
AcousticEchoCanceler的初始化需要一個sessionid,下面簡單的備忘下上層的調(diào)用方式:
1)初始化AudioRecord的時候需要處理第一個參數(shù)。
?
| ????audioRecord =?new?AudioRecord(MediaRecorder.AudioSource.VOICE_COMMUNICATION, frequency, channelIN, audioEncoding, tmpSize); |
| ????audioRecord =?new?AudioRecord(MediaRecorder.AudioSource.MIC, frequency, channelIN, audioEncoding, tmpSize); |
2)初始化好audioRecord之后,就可以通過
| audioRecord.getAudioSessionId() |
獲取到相應(yīng)的sessionid。
?
3)初始化AudioTrack時,也需要額外的處理sessionid。
| if?(chkNewDev() && audioRecord !=?null) |
| ????audioTrack =?new?AudioTrack(AudioManager.STREAM_VOICE_CALL, frequency, channelOUT, audioEncoding, tmpSize, AudioTrack.MODE_STREAM,audioRecord.getAudioSessionId()); |
| ????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; |
權(quán)限:
<uses-permission android:name="android.permission.RECORD_AUDIO" />
?
總結(jié):
1)android新版本增加的API?AcousticEchoCanceler 可以非常快速的開發(fā)出符合VOIP性質(zhì)的回聲消除程序。但是考慮到各種機型適配,仍然需要第三方的回聲消除程序。這里主要推薦兩個:webrtc里面的AEC/AECM,speex。
作者成功的在項目中使用了webrtc里面的回聲消除,感覺效果還可以。
2)作者編寫的上述代碼也只是根據(jù)官方的介紹編寫的,由于資料較少,不能保證代碼的正確性。
總結(jié)
以上是生活随笔為你收集整理的AudioEffect的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。