Какой параметр num_bands делает в WebRtcAec_Process() API (внутри модуля WebRtc Echo)?

Я работаю с собственным API AEC WebRtc.

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);
}

Даже если я использую 3 для num_bands, я получаю сбой из-за недопустимого доступа. Нужно ли каким-то образом разделить каждый кадр на 3 части?


person Al Mamun    schedule 19.11.2017    source источник


Ответы (1)


Сколько образцов вы пытаетесь обработать? Насколько я помню, он поддерживает только 80 или 160.

Кроме того, я давно написал Java-оболочку для модуля эхоподавления webRTC. Я думаю, что было две отдельные реализации модуля AEC, одна для мобильных устройств и одна для настольных компьютеров.

Тот, который я использовал, был мобильным и поддерживал только 8 кГц и 16 кГц.

person Dean Wild    schedule 16.01.2018