我正在使用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/