我正在使用WebRtc本机AEC API。

int32_t WebRtcAec_Process(void* aecInst, const float* const* nearend,
                          size_t num_bands, float* const* out,
                          size_t nrOfSamples, int16_t msInSndCardBuf,
                          int32_t skew);

我想从具有48K采样率,具有AEC的单声道(单声道)的音频中消除回声。

但是我不知道为什么需要num_bands。如果我给1赋值num_bands,我会在AEC内发生致命错误(断言错误)(RTC_DCHECK_EQ(aec->num_bands, num_bands);失败)。

我检查了aec->num_bands的预先计算的值,该值是48K的3
aec_core.cc:
if (sampFreq == 8000) {
   aec->num_bands = 1;
} else {
   aec->num_bands = (size_t)(sampFreq / 16000);
}

即使我将3用作num_bands,也会发生无效访问崩溃。我是否需要以某种方式将每个帧分成3部分?

最佳答案

您要处理多少个样本?我似乎记得它仅支持80或160。

另外,很久以前,我为webRTC回声消除模块编写了Java包装程序。我似乎认为AEC模块有两种单独的实现,一种用于移动,另一种用于桌面。

我使用的是移动设备,仅支持8Khz和16Khz。

关于audio - WebRtcAec_Process()API(内部WebRtc回声模块)中执行什么num_bands参数?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47376456/

10-11 22:49