我正在使用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个部分?
答案 0 :(得分:0)
您要处理多少个样本?我似乎记得它只支持80或160。
此外,我很久以前为webRTC回声消除模块编写了一个Java包装器。我似乎认为AEC模块有两个独立的实现,一个用于移动,一个用于桌面。
我使用的那个是移动的,只支持8Khz和16Khz。