android音频杂音问题_Android 音视频去回声、降噪(Android音频采集及回音消除)(转)...
好久沒(méi)寫(xiě)文章了,其實(shí)是想記錄一下自己在A(yíng)ndroid開(kāi)發(fā)的成長(zhǎng)歷程。談到音視頻這塊,對(duì)于新手來(lái)說(shuō)剛接觸到這一塊,那是非常非常的惡心~我自己弄這一塊也是從頭開(kāi)始,在 網(wǎng)上也翻閱了無(wú)數(shù)的資料、瀏覽了無(wú)數(shù)的博客,嘗試了多種方法,網(wǎng)上大致方法是采用第三方的,如webRtc、speex等。甚至花錢(qián)買(mǎi)積分去下demo,也發(fā)現(xiàn)了好多demo就是 ? ?騙積分的,呵呵~好氣~ 不談了。成長(zhǎng)的過(guò)程也是比較艱辛的,最后也還是自己解決了這個(gè)問(wèn)題~~也希望這篇文章能幫助處在當(dāng)時(shí)的我的一樣的情況下
。
1.Android聲音錄制
1. Android中使用AudioRecord錄制聲音,在A(yíng)ndroid中錄制聲音需要相應(yīng)的權(quán)限,注意動(dòng)態(tài)申請(qǐng)權(quán)限的問(wèn)題(6.0以上)。
//處理權(quán)限申請(qǐng)回調(diào)
@Override
public?void?onRequestPermissionsResult(int?requestCode,?String[]?permissions,?int[]?grantResults)?{
Log.v(TAG,?"處理權(quán)限申請(qǐng)回調(diào)");
PermissionUtils.requestPermissionsResult(ActivityCameraLiveView.this,?requestCode,?permissions,?grantResults,?mPermissionGrant);
}
private?PermissionUtils.PermissionGrant?mPermissionGrant?=?new?PermissionUtils.PermissionGrant()?{
@Override
public?void?onPermissionGranted(int?requestCode)?{
switch?(requestCode)?{
case?PermissionUtils.CODE_RECORD_AUDIO:
Log.v(TAG,?"PermissionGrant:?CODE_RECORD_AUDIO?audio?=?true");
audio?=?true;
break;
case?PermissionUtils.CODE_READ_EXTERNAL_STORAGE:
WRITE_EXTERNAL_STORAGE_PERMISSION?=?true;
Log.v(TAG,?"PermissionGrant:?WRITE_EXTERNAL_STORAGE_PERMISSION?=?true");
break;
case?PermissionUtils.CODE_STOP_CAMERA:
Log.v(TAG,?"PermissionUtils.CODE_STOP_CAMERA");
break;
case?PermissionUtils.CODE_WRITE_EXTERNAL_STORAGE:
break;
case?PermissionUtils.CODE_ACCESS_COARSE_LOCATION:
break;
}
}
};
2.對(duì)AudioRecord進(jìn)行錄音前需要對(duì)采樣率進(jìn)行設(shè)置
nMinBufSize?=?AudioRecord.getMinBufferSize(8000,
AudioFormat.CHANNEL_IN_MONO,
AudioFormat.ENCODING_PCM_16BIT);
2.Android回聲消除
網(wǎng)上回音消除方式大概有兩種 :1.通過(guò)安卓自帶的?VOICE_COMMUNICATION模式進(jìn)行錄音,自動(dòng)消除回音。2.使用第三方庫(kù)進(jìn)行消除(webRtc、Speex..),消除回音。
用第三方的話(huà),比較麻煩,而且不好實(shí)現(xiàn),用起來(lái)效果不是很明顯,試了一下Speex的,感覺(jué)手機(jī)端與手機(jī)端語(yǔ)音還可以,但是如果是手機(jī)端(APP)和硬件語(yǔ)音的話(huà),就要考慮到碼流格式的問(wèn)題,因?yàn)槲覀児静捎玫氖荊711格式的音頻流,所以就必須要先轉(zhuǎn)pcm格式然后再轉(zhuǎn)speex格式,最后轉(zhuǎn)711格式的。實(shí)在不行,還有一種就是在錄音的時(shí)候強(qiáng)制關(guān)閉揚(yáng)聲器,在錄音的時(shí)候就只錄到手機(jī)的聲音隔斷了揚(yáng)聲器的聲音,不過(guò)效果不是很明顯,還是會(huì)有滋滋的噪聲。
關(guān)閉揚(yáng)聲器
audioManager?=?(AudioManager)?mcontext.getSystemService(Context.AUDIO_SERVICE);
audioManager.setSpeakerphoneOn(false);
audioManager.setStreamVolume(AudioManager.STREAM_VOICE_CALL,?0,
AudioManager.STREAM_VOICE_CALL);
audioManager.setMode(AudioManager.MODE_IN_CALL);
這里我推薦第一種方法,不僅考慮到了手機(jī)機(jī)型的適配,還比較簡(jiǎn)單就改變一個(gè)參數(shù):
audioRecord?=?new?AudioRecord(MediaRecorder.AudioSource.VOICE_COMMUNICATION,?8000,
AudioFormat.CHANNEL_IN_MONO,?AudioFormat.ENCODING_PCM_16BIT,?nMinBufSize);
audioRecord.startRecording();
寫(xiě)到這里基本上回聲和噪聲就沒(méi)有了~
http://blog.csdn.net/wl532882877/article/details/78296662?locationNum=5&fps=1
總結(jié)
以上是生活随笔為你收集整理的android音频杂音问题_Android 音视频去回声、降噪(Android音频采集及回音消除)(转)...的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 一份非常完整的 MySQL 规范
- 下一篇: WAP PUSH解析(3)——Andro