/* 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;
}