/* TODO: rate also beyond 8000 */ static EqualizerState * equalizer_state_new(int nfft) { EqualizerState *s=(EqualizerState *)ms_new0(EqualizerState,1); s->rate=8000; s->nfft=nfft; s->fft_cpx=(ms_word16_t*)ms_new0(ms_word16_t,s->nfft); equalizer_state_flatten(s); s->fir_len=s->nfft; s->fir=(ms_word16_t*)ms_new(ms_word16_t,s->fir_len); s->mem=(ms_mem_t*)ms_new0(ms_mem_t,s->fir_len); s->needs_update=TRUE; s->active=TRUE; return s; }
static void equalizer_rate_update( EqualizerState* s, int rate ){ int nFFT; if( rate < 16000 ){ nFFT = 128; } else if( rate < 32000){ nFFT = 256; } else { nFFT = 512; } ms_message("Equalizer rate: %d, selecting %d steps for FFT", rate, nFFT); s->rate=rate; s->nfft=nFFT; if (s->fft_cpx != NULL) ms_free(s->fft_cpx); s->fft_cpx=(ms_word16_t*)ms_new0(ms_word16_t,s->nfft); equalizer_state_flatten(s); s->fir_len=s->nfft; if (s->fir != NULL) ms_free(s->fir); s->fir=(ms_word16_t*)ms_new0(ms_word16_t,s->fir_len); if (s->mem != NULL) ms_free(s->mem); s->mem=(ms_mem_t*)ms_new0(ms_mem_t,s->fir_len); s->needs_update=TRUE; }