0
我想了解如何正确使用两个WebRtcAecm函数。看起来有两个主要功能用于移动回声消除。使用WebRtcAecm函数的正确方法
第一个是WebRtcAecm_BufferFarend
:
int32_t WebRtcAecm_BufferFarend(void* aecmInst,
const int16_t* farend,
int16_t nrOfSamples);
我想这是我们在通过我们从远端接收的音频数据。当我们继续接收音频数据包时,我们是否继续调用此方法?另外,该函数是否会复制传入的缓冲区,以便我们可以为下一个数据包重用相同的缓冲区?
的另一个功能是WebRtcAecm_Process
:
int32_t WebRtcAecm_Process(void* aecmInst,
const int16_t* nearendNoisy,
const int16_t* nearendClean,
int16_t* out,
int16_t nrOfSamples,
int16_t msInSndCardBuf);
在互联网上的代码片段,我看到了正被用于nearendNoisy和nearendClean相同的指针。不应该nearendClean参数为null,如果我们不做任何噪音抑制?
最后,在两个不同的线程中调用这两个方法有什么问题吗?我们的远程音频接收器代码位于一个线程中,我们的麦克风监听器代码位于另一个线程中。
非常感谢您的帮助。
谢谢。你的代码很有帮助。问候。 – Peter
嗨,billhoo。我执行了你的例子,它的输出是一个新文件。但是当我播放它时,没有任何声音(甚至是输入文件中的人声)。你可以帮我吗?谢谢。 – Spinning
@Spinning嗨,我将PCM音频作为近音和远音信号,并将延迟设置为10ms,因此理想输出完全没有声音。顺便说一句,经过很长时间来优化我的程序与AECM(甚至APM),我仍然无法让它在100%完美的实时VoIP通话中工作。所以如果你想使用AECM,请准备好它的反馈。更多信息。可以在[google aecm issues]中找到(https://code.google.com/p/webrtc/issues/list?can=2&q=aecm&colspec=ID+Pri+Mstone+ReleaseBlock+Area+Status+Owner+Summary&x= mstone&y = owner&cells = tiles) – BillHoo