| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 | /*  *  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) {	// in any case, need to clear update flag	equalizer.update = false;		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);	    	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 take the 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);	}	}
 |