簡體   English   中英

Android上的WebRTC AEC

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM