首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >安卓平台上的WebRTC AEC

安卓平台上的WebRTC AEC
EN

Stack Overflow用户
提问于 2012-10-10 11:55:53
回答 3查看 10.5K关注 0票数 4

我正在为Android开发一个SIP软电话应用程序,并面临回声消除问题。我尝试过使用Speex来解决这个问题,但没有成功。所以我的下一张照片是WebRTC AEC (声学回声消除),但是我找不到关于如何使用它的任何文档。

在我的应用程序中,音频是用AudioTrack和AudioRecord类管理的,但是发送和接收的套接字是C代码(与JNI集成)。WebRTC是一个巨大的项目,我只想集成AEC模块.

有人知道我必须包括哪些文件,编译器需要哪些标志,哪些函数调用要执行,等等?我有CSipSimple代码,它也使用WebRTC (但对于其他用途也是如此),我无法找到包含和使用它的简单和正确的方法。

谢谢。

EN

回答 3

Stack Overflow用户

发布于 2013-02-04 18:11:45

您需要以下文件:

代码语言:javascript
复制
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

用法:

代码语言:javascript
复制
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
);
票数 10
EN

Stack Overflow用户

发布于 2012-10-11 09:00:28

这不能回答您的问题,但是如果您无法在webrtc.org上找到所需的内容,请尝试讨论-webrtc组。

票数 0
EN

Stack Overflow用户

发布于 2012-12-20 22:24:29

注:下面引用的安卓版本为4.1 (JellyBean)

反应可能太迟了。然而,对于对dbaustista的问题感兴趣的人,请考虑如下:

AEC采用AudioEffect类建模。因此,AEC AudioEffect对象需要添加到RecordThread的“效果链”中。我相信AEC的实现是内置在libaudioprocessing库中的。见下文的补充说明。

图书馆

代码语言:javascript
复制
/system/etc/audio_effects.conf
libraries {
...
   pre_processing {
     path /system/lib/soundfx/libaudiopreprocessing.so
   }
}

接口

代码语言:javascript
复制
media/AudioEffect.h

示例

下面的示例演示如何向PlaybackThread.添加AudioEffect对象。将类似的逻辑应用于RecordThread,即将AEC对象添加到RecordThread的效果链中。

mediaframeworktest/functional/audio/MediaAudioEffectTest.java

代码语言:javascript
复制
      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 Config Options

TODO:添加AEC的示例配置

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12818721

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档