| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586 | /*  *  Squeezelite for esp32 * *  (c) Philippe G. 2020, philippe_44@outlook.com * *  This software is released under the MIT License. *  https://opensource.org/licenses/MIT * */ #include "squeezelite.h" #include "equalizer.h"#include "esp_equalizer.h" #define EQ_BANDS	10static log_level loglevel = lINFO; static struct {	void *handle;	float gain[EQ_BANDS];	bool update;} equalizer = { .update = true }; /**************************************************************************************** * open equalizer */void equalizer_open(u32_t sample_rate) {	if (sample_rate != 11025 && sample_rate != 22050 && sample_rate != 44100 && sample_rate != 48000) {		LOG_WARN("equalizer only supports 11025, 22050, 44100 and 48000 sample rates, not %u", sample_rate);		return;	}			equalizer.handle = esp_equalizer_init(2, sample_rate, EQ_BANDS, 0);	equalizer.update = false;    	if (equalizer.handle) {		bool active = false;				for (int i = 0; i < EQ_BANDS; i++) {			esp_equalizer_set_band_value(equalizer.handle, equalizer.gain[i], i, 0);			esp_equalizer_set_band_value(equalizer.handle, equalizer.gain[i], i, 1);			active |= equalizer.gain[i] != 0;		}				// do not activate equalizer if all gain are 0		if (!active) equalizer_close();				LOG_INFO("equalizer initialized %u", active);	} else {		LOG_WARN("can't init equalizer");	}	}	/**************************************************************************************** * close equalizer */void equalizer_close(void) {	if (equalizer.handle) {		esp_equalizer_uninit(equalizer.handle);		equalizer.handle = NULL;	}}	/**************************************************************************************** * update equalizer gain */void equalizer_update(s8_t *gain) {	for (int i = 0; i < EQ_BANDS; i++) equalizer.gain[i] = gain[i];	equalizer.update = true;}/**************************************************************************************** * process equalizer  */void equalizer_process(u8_t *buf, u32_t bytes, u32_t sample_rate) {	// don't want to process with output locked, so tak ethe small risk to miss one parametric update	if (equalizer.update) {		equalizer_close();		equalizer_open(sample_rate);	}		if (equalizer.handle) {		esp_equalizer_process(equalizer.handle, buf, bytes, sample_rate, 2);	}	}
 |