[英]WebRTC AEC on Android
我正在為Android開發SIP軟電話應用程序,並面臨回聲消除問題。 我試圖使用Speex解決它沒有成功。 所以我的下一個鏡頭是WebRTC AEC (聲學回聲消除),但我找不到任何關於如何使用它的文檔。
在我的應用程序中,音頻使用Java中的AudioTrack和AudioRecord類進行管理,但發送和接收的套接字是C代碼(與JNI集成)。 WebRTC是一個大型項目,我只想集成AEC模塊。
有人知道我必須包含哪些文件,編譯器需要哪些標志,哪些函數調用,等等? 我有CSipSimple代碼,它也使用WebRTC(但也用於其他用途),我找不到包含和使用它的簡單方法。
謝謝。
您需要以下文件:
aec/modules/audio_processing/aec/aec_core_sse2.c
aec/modules/audio_processing/aec/aec_core.c
aec/modules/audio_processing/aec/aec_rdft_sse2.c
aec/modules/audio_processing/aec/aec_rdft.c
aec/modules/audio_processing/aec/aec_resampler.c
aec/modules/audio_processing/aec/echo_cancellation.c
aec/modules/audio_processing/utility/ring_buffer.c
aec/modules/audio_processing/utility/delay_estimator.c
aec/modules/audio_processing/utility/delay_estimator_wrapper.c
aec/system_wrappers/source/cpu_features.cc
aec/common_audio/signal_processing/randomization_functions.c
用法:
void * aec = 0;
int status = WebRtcAecm_Create(&aec);
status = WebRtcAecm_Init(aec, 8000 /* sample rate */);
// Buffer the far end frames
int status = WebRtcAecm_BufferFarend(
aec, play_frm, 160
);
// Cancel echo
status = WebRtcAecm_Process(
aec, (WebRtc_Word16 *)buf, (WebRtc_Word16 *)buf,
tmp_frm, 160,
echo_tail / tail_factor
);
這不能解答您的問題,但如果您無法在webrtc.org上找到所需內容 ,請嘗試使用discuss-webrtc小組。
注意:下面引用的android版本是4.1(JellyBean)
回應可能為時已晚。 但是,對於任何對dbaustista問題的答案感興趣的人,請考慮以下事項:
AEC由AudioEffect類建模。 因此,需要將AEC AudioEffect對象添加到RecordThread的“效果鏈”中。 我相信AEC的實現是內置於libaudioprocessing
庫中的。 請參閱以下附加說明。
圖書館
/system/etc/audio_effects.conf
libraries {
...
pre_processing {
path /system/lib/soundfx/libaudiopreprocessing.so
}
}
接口
media/AudioEffect.h
例
下面的示例顯示如何將AudioEffect對象添加到PlaybackThread 。 將類似的邏輯應用於RecordThread,即將AEC對象添加到RecordThread的效果鏈中。
mediaframeworktest /功能/音頻/ MediaAudioEffectTest.java
AudioTrack track = new AudioTrack(
AudioManager.STREAM_MUSIC,
44100,
AudioFormat.CHANNEL_OUT_MONO,
AudioFormat.ENCODING_PCM_16BIT,
AudioTrack.getMinBufferSize(44100,
AudioFormat.CHANNEL_OUT_MONO,
AudioFormat.ENCODING_PCM_16BIT),
AudioTrack.MODE_STREAM);
assertNotNull(msg + ": could not create AudioTrack", track);
AudioEffect effect = new AudioEffect(AudioEffect.EFFECT_TYPE_ENV_REVERB,
AudioEffect.EFFECT_TYPE_NULL,
0,
0);
track.attachAuxEffect(effect.getId());
track.setAuxEffectSendLevel(1.0f);
AEC配置選項
TODO:添加AEC的示例配置
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.