From a633524936ef56e133807d74775688468dc2606e Mon Sep 17 00:00:00 2001 From: David Carr Date: Tue, 20 Aug 2024 23:52:17 -0500 Subject: [PATCH 1/4] Fix for ESP32 equalizer settings don't update when expected --- components/squeezelite/equalizer.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/components/squeezelite/equalizer.c b/components/squeezelite/equalizer.c index f823fe19..d2d717bd 100644 --- a/components/squeezelite/equalizer.c +++ b/components/squeezelite/equalizer.c @@ -159,8 +159,7 @@ void equalizer_set_gain(int8_t *gain) { config[n-1] = '\0'; config_set_value(NVS_TYPE_STR, "equalizer", config); - // update only if something changed - if (!memcmp(equalizer.gain, gain, EQ_BANDS)) equalizer.update = true; + equalizer.update = true; LOG_INFO("equalizer gain %s", config); #else From 78e8d6002199cc96c1a7554549fda7ce719b70de Mon Sep 17 00:00:00 2001 From: David Carr Date: Wed, 4 Sep 2024 13:49:51 -0500 Subject: [PATCH 2/4] Equalizer: check if requested gain has changed before updating --- components/squeezelite/equalizer.c | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/components/squeezelite/equalizer.c b/components/squeezelite/equalizer.c index d2d717bd..f342d705 100644 --- a/components/squeezelite/equalizer.c +++ b/components/squeezelite/equalizer.c @@ -148,18 +148,28 @@ void equalizer_set_volume(unsigned left, unsigned right) { */ void equalizer_set_gain(int8_t *gain) { #if BYTES_PER_FRAME == 4 + static uint8_t last_gain[EQ_BANDS] = { }; + bool eq_update = false; + char config[EQ_BANDS * 4 + 1] = { }; int n = 0; for (int i = 0; i < EQ_BANDS; i++) { equalizer.gain[i] = gain[i]; n += sprintf(config + n, "%d,", gain[i]); + + if (gain[i] != last_gain[i]) + { + eq_update = true; + } + last_gain[i] = gain[i]; } config[n-1] = '\0'; config_set_value(NVS_TYPE_STR, "equalizer", config); - equalizer.update = true; + //"or" in this value in case equalizer.update is set for another reason + equalizer.update |= eq_update; LOG_INFO("equalizer gain %s", config); #else From 57cd009e4cce7acb23dc8221d68f43916381a86e Mon Sep 17 00:00:00 2001 From: David Carr Date: Wed, 4 Sep 2024 14:52:27 -0500 Subject: [PATCH 3/4] Revert "Equalizer: check if requested gain has changed before updating" This reverts commit 78e8d6002199cc96c1a7554549fda7ce719b70de. --- components/squeezelite/equalizer.c | 12 +----------- 1 file changed, 1 insertion(+), 11 deletions(-) diff --git a/components/squeezelite/equalizer.c b/components/squeezelite/equalizer.c index f342d705..d2d717bd 100644 --- a/components/squeezelite/equalizer.c +++ b/components/squeezelite/equalizer.c @@ -148,28 +148,18 @@ void equalizer_set_volume(unsigned left, unsigned right) { */ void equalizer_set_gain(int8_t *gain) { #if BYTES_PER_FRAME == 4 - static uint8_t last_gain[EQ_BANDS] = { }; - bool eq_update = false; - char config[EQ_BANDS * 4 + 1] = { }; int n = 0; for (int i = 0; i < EQ_BANDS; i++) { equalizer.gain[i] = gain[i]; n += sprintf(config + n, "%d,", gain[i]); - - if (gain[i] != last_gain[i]) - { - eq_update = true; - } - last_gain[i] = gain[i]; } config[n-1] = '\0'; config_set_value(NVS_TYPE_STR, "equalizer", config); - //"or" in this value in case equalizer.update is set for another reason - equalizer.update |= eq_update; + equalizer.update = true; LOG_INFO("equalizer gain %s", config); #else From e21e2cf7f9c79e1942431c47fdb8286533043321 Mon Sep 17 00:00:00 2001 From: David Carr Date: Wed, 4 Sep 2024 15:07:42 -0500 Subject: [PATCH 4/4] Equalizer: change gain to int8 and memcmp-based update check --- components/squeezelite/equalizer.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/components/squeezelite/equalizer.c b/components/squeezelite/equalizer.c index d2d717bd..fb8a9023 100644 --- a/components/squeezelite/equalizer.c +++ b/components/squeezelite/equalizer.c @@ -22,7 +22,8 @@ static EXT_RAM_ATTR struct { void *handle; float loudness, volume; uint32_t samplerate; - float gain[EQ_BANDS], loudness_gain[EQ_BANDS]; + int8_t gain[EQ_BANDS]; + float loudness_gain[EQ_BANDS]; bool update; } equalizer; @@ -151,6 +152,8 @@ void equalizer_set_gain(int8_t *gain) { char config[EQ_BANDS * 4 + 1] = { }; int n = 0; + if (memcmp(equalizer.gain, gain, EQ_BANDS) != 0) equalizer.update = true; + for (int i = 0; i < EQ_BANDS; i++) { equalizer.gain[i] = gain[i]; n += sprintf(config + n, "%d,", gain[i]); @@ -159,8 +162,6 @@ void equalizer_set_gain(int8_t *gain) { config[n-1] = '\0'; config_set_value(NVS_TYPE_STR, "equalizer", config); - equalizer.update = true; - LOG_INFO("equalizer gain %s", config); #else LOG_INFO("no equalizer with 32 bits samples");