Какой параметр 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 кГц.

Другие вопросы по тегам