日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

AudioEffect

發(fā)布時間:2024/1/18 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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)
????{
????????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,下面簡單的備忘下上層的調(diào)用方式:

1)初始化AudioRecord的時候需要處理第一個參數(shù)。

?

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()

獲取到相應(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());
}
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;
}

權(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)容還不錯,歡迎將生活随笔推薦給好友。