Java Android上的WebRTC AEC

Java Android上的WebRTC AEC,java,android,c,webrtc,aec,Java,Android,C,Webrtc,Aec,我正在为Android开发SIP softphone应用程序,并面临回声消除问题。我尝试使用Speex解决它,但没有成功。因此,我的下一个镜头是WebRTC AEC(声学回声消除),但我找不到任何关于如何使用它的文档 在我的应用程序中,音频由Java中的AudioTrack和AudioRecord类管理,但发送和接收的套接字是C代码(与JNI集成)。WebRTC是一个大型项目,我只想集成AEC模块 有人知道我必须包含哪些文件、编译器需要哪些标志、要执行哪些函数调用等等吗?我有CSipSimple

我正在为Android开发SIP softphone应用程序,并面临回声消除问题。我尝试使用Speex解决它,但没有成功。因此,我的下一个镜头是WebRTC AEC(声学回声消除),但我找不到任何关于如何使用它的文档

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

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


谢谢。

这并不能回答你的问题,但是如果你找不到你需要的东西,试试这个群组。

注意:下面引用的android版本是4.1(JellyBean)

回应可能太晚了。然而,对于感兴趣的任何人,如<强> DbaStuista <强>的问题,请考虑以下内容:

AEC由AudioEffect类建模。因此,需要将AEC AudioEffect对象添加到RecordThread的“效果链”。我相信AEC的实现是内置在
libaudioprocessing
库中的。请参阅下面的其他注释

/system/etc/audio_effects.conf
libraries {
...
   pre_processing {
     path /system/lib/soundfx/libaudiopreprocessing.so
   }
}
接口

media/AudioEffect.h
示例

media/AudioEffect.h
下面的示例演示如何将AudioEffect对象添加到播放线程中。将类似逻辑应用于RecordThread,即将AEC对象添加到RecordThread的效果链

mediaframeworktest/functional/audio/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的示例配置

您将需要以下文件:

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

我从来没有得到Speex回声消除工作得很好(很多噪音)。请参阅我从WebRTC获得的关于如何包含AEC的答案。谢谢。旁注:SSE2用于x86体系结构。如果在基于ARM的平台上工作,则必须使用aec“m”源文件。更好的是,您可以链接到已经集成的“libaudiopreprocessing”,我正在使用类似AudioSource AudioSource=factory.createAudioSource(new MediaConstraints());localMS.addTrack(factory.createAudioTrack(“ARDAMSa0”,audioSource));我使用Peerconnectionfactory创建了audiosource,并将其添加到mediastream曲目中。那么,在这种情况下,我如何使用您的代码呢?