Какой параметр num_bands используется в API WebRtcAec_Process() (внутри модуля эха WebRtc)?
Я работаю с 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
для 48К, от aec_core.cc
:
if (sampFreq == 8000) {
aec->num_bands = 1;
} else {
aec->num_bands = (size_t)(sampFreq / 16000);
}
Даже если я использую 3 для num_bands
, Я получил сбой с недействительным доступом. Нужно ли как-то разбивать каждый кадр на 3 части?
1 ответ
Сколько образцов вы пытаетесь обработать? Кажется, я помню, что поддерживает только 80 или 160.
Кроме того, я давно написал оболочку Java для модуля эхоподавления webRTC. Кажется, я думаю, что было две отдельные реализации модуля AEC, одна для мобильных устройств и одна для настольных компьютеров.
Тот, который я использовал, был мобильным и поддерживал только 8 кГц и 16 кГц.