2013-10-30 75 views
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,如果我们不做任何噪音抑制?

最后,在两个不同的线程中调用这两个方法有什么问题吗?我们的远程音频接收器代码位于一个线程中,我们的麦克风监听器代码位于另一个线程中。

非常感谢您的帮助。

回答

0

我已经发布了github上的project,它会告诉你如何调用这些函数。

nearendClean确实可以设置为NULL,并且我总是将它设置为NULL,cus'我的NS在AECM处理之后。

Holp I help :)

+0

谢谢。你的代码很有帮助。问候。 – Peter

+0

嗨,billhoo。我执行了你的例子,它的输出是一个新文件。但是当我播放它时,没有任何声音(甚至是输入文件中的人声)。你可以帮我吗?谢谢。 – Spinning

+0

@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

相关问题