1

我正在使用 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是必要的。如果我1num_bands我在 AEC 中得到致命(断言错误)(RTC_DCHECK_EQ(aec->num_bands, num_bands);失败)赋值。

我检查了48K的aec->num_bands预计算值,来自:3aec_core.cc

if (sampFreq == 8000) {
   aec->num_bands = 1;
} else {
   aec->num_bands = (size_t)(sampFreq / 16000);
}

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

4

1 回答 1

0

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

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

我用的是手机,只支持8Khz和16Khz。

于 2018-01-16T12:08:58.657 回答