什么num_bands参数在WebRtcAec_Process()API(Inside WebRtc Echo Module)中做什么?

时间:2017-11-19 11:46:26

标签: audio webrtc signal-processing audio-processing echo-cancellation

我正在使用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的预先计算值,即3为48K, 来自aec_core.cc

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

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

1 个答案:

答案 0 :(得分:0)

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

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

我使用的那个是移动的,只支持8Khz和16Khz。