From d78c50f78164807c795a75a319bd239889cb761f Mon Sep 17 00:00:00 2001 From: philippe44 Date: Tue, 18 Feb 2020 18:37:03 -0800 Subject: [PATCH] "log-like" scale on spectrum visu --- components/squeezelite/display.c | 88 ++++++++++++------ plugin/SqueezeESP32.zip | Bin 5170 -> 5408 bytes plugin/SqueezeESP32/Graphics.pm | 17 +--- .../plugins/SqueezeESP32/settings/basic.html | 5 + plugin/SqueezeESP32/Plugin.pm | 1 + plugin/SqueezeESP32/Settings.pm | 3 +- plugin/SqueezeESP32/install.xml | 2 +- plugin/SqueezeESP32/strings.txt | 8 ++ plugin/repo.xml | 4 +- 9 files changed, 83 insertions(+), 45 deletions(-) diff --git a/components/squeezelite/display.c b/components/squeezelite/display.c index bd805b28..0fedb87e 100644 --- a/components/squeezelite/display.c +++ b/components/squeezelite/display.c @@ -61,14 +61,20 @@ struct visu_packet { u8_t which; u8_t count; union { - u32_t width; - u32_t full_bars; + struct { + u32_t bars; + u32_t spectrum_scale; + } full; + struct { + u32_t width; + u32_t height; + s32_t col; + s32_t row; + u32_t border; + u32_t bars; + u32_t spectrum_scale; + }; }; - u32_t height; - s32_t col; - s32_t row; - u32_t border; - u32_t small_bars; }; struct ANIC_header { @@ -98,8 +104,7 @@ static struct { #define RMS_LEN_BIT 6 #define RMS_LEN (1 << RMS_LEN_BIT) -// actually this is 2x the displayed BW -#define DISPLAY_BW 32000 +#define DISPLAY_BW 20000 static struct scroller_s { // copy of grfs content @@ -128,9 +133,10 @@ static struct scroller_s { static EXT_RAM_ATTR struct { int bar_gap, bar_width, bar_border; struct { - int current; - int max; + int current, max; + int limit; } bars[MAX_BARS]; + float spectrum_scale; int n, col, row, height, width, border; enum { VISU_BLANK, VISU_VUMETER, VISU_SPECTRUM, VISU_WAVEFORM } mode; int speed, wake; @@ -659,13 +665,14 @@ static void visu_update(void) { // actual FFT that might be less cycle than all the crap below dsps_fft2r_fc32_ae32(visu.samples, FFT_LEN); dsps_bit_rev_fc32_ansi(visu.samples, FFT_LEN); + float rate = visu_export.rate; // now arrange the result with the number of bar and sampling rate (don't want DC) - for (int i = 1, j = 1; i <= visu.n && j < (FFT_LEN / 2); i++) { + for (int i = 0, j = 1; i < visu.n && j < (FFT_LEN / 2); i++) { float power, count; // find the next point in FFT (this is real signal, so only half matters) - for (count = 0, power = 0; j * visu.n * visu_export.rate < i * (FFT_LEN / 2) * DISPLAY_BW && j < (FFT_LEN / 2); j++, count += 1) { + for (count = 0, power = 0; j * visu_export.rate < visu.bars[i].limit * FFT_LEN && j < FFT_LEN / 2; j++, count += 1) { power += visu.samples[2*j] * visu.samples[2*j] + visu.samples[2*j+1] * visu.samples[2*j+1]; } // due to sample rate, we have reached the end of the available spectrum @@ -674,7 +681,7 @@ static void visu_update(void) { if (count) power /= count * 2.; } else if (count) { // how much of what remains do we need to add - float ratio = j - (float) (i * DISPLAY_BW * (FFT_LEN / 2)) / (float) (visu.n * visu_export.rate); + float ratio = j - (visu.bars[i].limit * FFT_LEN) / rate; power += (visu.samples[2*j] * visu.samples[2*j] + visu.samples[2*j+1] * visu.samples[2*j+1]) * ratio; // normalize accumulated data @@ -685,9 +692,9 @@ static void visu_update(void) { } // convert to dB and bars, same back-off - if (power) visu.bars[i-1].current = 32 * (0.01667f*10*(log10f(power) - log10f(FFT_LEN/2*2)) - 0.2543f); - if (visu.bars[i-1].current > 31) visu.bars[i-1].current = 31; - else if (visu.bars[i-1].current < 0) visu.bars[i-1].current = 0; + if (power) visu.bars[i].current = 32 * (0.01667f*10*(log10f(power) - log10f(FFT_LEN/2*2)) - 0.2543f); + if (visu.bars[i].current > 31) visu.bars[i].current = 31; + else if (visu.bars[i].current < 0) visu.bars[i].current = 0; } } } @@ -715,6 +722,22 @@ static void visu_update(void) { } } + +/**************************************************************************************** + * Visu packet handler + */ +void spectrum_limits(int min, int n, int pos) { + if (n / 2) { + int i; + float step = (DISPLAY_BW - min) * visu.spectrum_scale / (n/2); + visu.bars[pos].limit = min + step; + for (i = 1; i < n/2; i++) visu.bars[pos+i].limit = visu.bars[pos+i-1].limit + step; + spectrum_limits(visu.bars[pos + n/2 - 1].limit, n/2, pos + n/2); + } else { + visu.bars[pos].limit = DISPLAY_BW; + } +} + /**************************************************************************************** * Visu packet handler */ @@ -737,31 +760,38 @@ static void visu_handler( u8_t *data, int len) { if (visu.row >= SB_HEIGHT) display->clear(false, true, visu.col, visu.row, visu.col + visu.width - 1, visu.row - visu.height - 1); if (visu.mode) { - pkt->width = htonl(pkt->width); - pkt->height = htonl(pkt->height); - pkt->row = htonl(pkt->row); - pkt->col = htonl(pkt->col); - - if (pkt->width > 0 && pkt->count >= 4) { + if (pkt->count >= 4) { // small visu, then go were we are told to - visu.width = pkt->width; + pkt->height = htonl(pkt->height); + pkt->row = htonl(pkt->row); + pkt->col = htonl(pkt->col); + + visu.width = htonl(pkt->width); visu.height = pkt->height ? pkt->height : SB_HEIGHT; visu.col = pkt->col < 0 ? display->width + pkt->col : pkt->col; visu.row = pkt->row < 0 ? display->height + pkt->row : pkt->row; visu.border = htonl(pkt->border); - bars = htonl(pkt->small_bars); + bars = htonl(pkt->bars); + visu.spectrum_scale = htonl(pkt->spectrum_scale) / 100.; } else { // full screen visu, try to use bottom screen if available visu.width = display->width; visu.height = display->height > SB_HEIGHT ? display->height - SB_HEIGHT : display->height; visu.col = visu.border = 0; visu.row = display->height - visu.height; - // already in CPU order - bars = pkt->full_bars; + bars = htonl(pkt->full.bars); + visu.spectrum_scale = htonl(pkt->full.spectrum_scale) / 100.; } // try to adapt to what we have - visu.n = visu.mode == VISU_VUMETER ? 2 : (bars ? bars : MAX_BARS); + if (visu.mode == VISU_SPECTRUM) { + visu.n = bars ? bars : MAX_BARS; + if (visu.spectrum_scale <= 0 || visu.spectrum_scale > 0.5) visu.spectrum_scale = 0.5; + spectrum_limits(0, visu.n, 0); + } else { + visu.n = 2; + } + do { visu.bar_width = (visu.width - visu.border - visu.bar_gap * (visu.n - 1)) / visu.n; if (visu.bar_width > 0) break; @@ -784,7 +814,7 @@ static void visu_handler( u8_t *data, int len) { display->clear(false, true, visu.col, visu.row, visu.col + visu.width - 1, visu.row - visu.height - 1); - LOG_INFO("Visualizer with %u bars of width %d:%d:%d:%d (%w:%u,h:%u,c:%u,r:%u)", visu.n, visu.bar_border, visu.bar_width, visu.bar_gap, visu.border, visu.width, visu.height, visu.col, visu.row); + LOG_INFO("Visualizer with %u bars of width %d:%d:%d:%d (%w:%u,h:%u,c:%u,r:%u,s:%.02f)", visu.n, visu.bar_border, visu.bar_width, visu.bar_gap, visu.border, visu.width, visu.height, visu.col, visu.row, visu.spectrum_scale); } else { LOG_INFO("Stopping visualizer"); } diff --git a/plugin/SqueezeESP32.zip b/plugin/SqueezeESP32.zip index 626d46d9d7a95a9b744c209b23dfca85f745936a..4942fc516a97550f16ee1b9595d03cd495c69b06 100644 GIT binary patch delta 3334 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 a!Iyo&5GIpR9^^oSnP*f0bJG6G^uGa==UI6G diff --git a/plugin/SqueezeESP32/Graphics.pm b/plugin/SqueezeESP32/Graphics.pm index 42ab788e..29b53bc2 100644 --- a/plugin/SqueezeESP32/Graphics.pm +++ b/plugin/SqueezeESP32/Graphics.pm @@ -16,6 +16,7 @@ my $VISUALIZER_SPECTRUM_ANALYZER = 2; my $VISUALIZER_WAVEFORM = 3; my $width = $prefs->get('width') || 128; +my $spectrum_scale = $prefs->get('spectrum_scale') || 0.5; my @modes = ( # mode 0 @@ -55,7 +56,7 @@ my @modes = ( { desc => ['VISUALIZER_SPECTRUM_ANALYZER_SMALL'], bar => 0, secs => 0, width => $width, _width => -32, # extra parameters (width, height, col (< 0 = from right), row (< 0 = from bottom), bars, left space) - params => [$VISUALIZER_SPECTRUM_ANALYZER, 32, 32, -32, 0, 2, 6] }, + params => [$VISUALIZER_SPECTRUM_ANALYZER, 32, 32, -32, 0, 2, 6, $spectrum_scale] }, # mode 9 { desc => ['VISUALIZER_VUMETER'], bar => 0, secs => 0, width => $width, @@ -64,7 +65,7 @@ my @modes = ( { desc => ['VISUALIZER_SPECTRUM_ANALYZER'], bar => 0, secs => 0, width => $width, # extra parameters (bars) - params => [$VISUALIZER_SPECTRUM_ANALYZER, 16] }, + params => [$VISUALIZER_SPECTRUM_ANALYZER, 16, $spectrum_scale] }, # mode 11 { desc => ['VISUALIZER_VUMETER', 'AND', 'ELAPSED'], bar => 0, secs => 1, width => $width, @@ -73,7 +74,7 @@ my @modes = ( { desc => ['VISUALIZER_SPECTRUM_ANALYZER', 'AND', 'ELAPSED'], bar => 0, secs => 1, width => $width, # extra parameters (bars) - params => [$VISUALIZER_SPECTRUM_ANALYZER, 16] }, + params => [$VISUALIZER_SPECTRUM_ANALYZER, 16, $spectrum_scale] }, # mode 13 { desc => ['VISUALIZER_VUMETER', 'AND', 'REMAINING'], bar => 0, secs => -1, width => $width, @@ -82,7 +83,7 @@ my @modes = ( { desc => ['VISUALIZER_SPECTRUM_ANALYZER', 'AND', 'REMAINING'], bar => 0, secs => -1, width => $width, # extra parameters (bars) - params => [$VISUALIZER_SPECTRUM_ANALYZER, 16] }, + params => [$VISUALIZER_SPECTRUM_ANALYZER, 16, $spectrum_scale] }, ); @@ -135,14 +136,6 @@ sub displayHeight { return 32; } -sub updateWidth { - my ($display, $width) = @_; - - foreach my $mode (@{$display->modes}) { - $mode->{width} = $width + 1 + $mode->{_width} || 0; - } -} - sub vfdmodel { return 'graphic-'.$width.'x32'; } diff --git a/plugin/SqueezeESP32/HTML/EN/plugins/SqueezeESP32/settings/basic.html b/plugin/SqueezeESP32/HTML/EN/plugins/SqueezeESP32/settings/basic.html index f6cffbe7..dec653b4 100644 --- a/plugin/SqueezeESP32/HTML/EN/plugins/SqueezeESP32/settings/basic.html +++ b/plugin/SqueezeESP32/HTML/EN/plugins/SqueezeESP32/settings/basic.html @@ -6,6 +6,11 @@ [% END %] + [% WRAPPER setting title="PLUGIN_SQUEEZEESP32_SPECTRUM_SCALE" desc="PLUGIN_SQUEEZEESP32_SPECTRUM_SCALE_DESC" %] + + [% END %] + + [% PROCESS settings/footer.html %] diff --git a/plugin/SqueezeESP32/Plugin.pm b/plugin/SqueezeESP32/Plugin.pm index 893500b0..e39979bf 100644 --- a/plugin/SqueezeESP32/Plugin.pm +++ b/plugin/SqueezeESP32/Plugin.pm @@ -10,6 +10,7 @@ my $prefs = preferences('plugin.squeezeesp32'); $prefs->init({ width => 128, + spectrum_scale => 50, }); my $log = Slim::Utils::Log->addLogCategory({ diff --git a/plugin/SqueezeESP32/Settings.pm b/plugin/SqueezeESP32/Settings.pm index 0281fb07..4856383d 100644 --- a/plugin/SqueezeESP32/Settings.pm +++ b/plugin/SqueezeESP32/Settings.pm @@ -17,13 +17,14 @@ sub page { } sub prefs { - return (preferences('plugin.SqueezeESP32'), qw(width)); + return (preferences('plugin.SqueezeESP32'), qw(width spectrum_scale)); } sub handler { my ($class, $client, $params, $callback, @args) = @_; $callback->($client, $params, $class->SUPER::handler($client, $params), @args); + $client->update(); } diff --git a/plugin/SqueezeESP32/install.xml b/plugin/SqueezeESP32/install.xml index 548170f5..51365287 100644 --- a/plugin/SqueezeESP32/install.xml +++ b/plugin/SqueezeESP32/install.xml @@ -10,6 +10,6 @@ PLUGIN_SQUEEZEESP32 PLUGIN_SQUEEZEESP32_DESC Plugins::SqueezeESP32::Plugin - 0.10 + 0.11 Philippe diff --git a/plugin/SqueezeESP32/strings.txt b/plugin/SqueezeESP32/strings.txt index ae441532..d51fa50e 100644 --- a/plugin/SqueezeESP32/strings.txt +++ b/plugin/SqueezeESP32/strings.txt @@ -9,3 +9,11 @@ PLUGIN_SQUEEZEESP32_DESC PLUGIN_SQUEEZEESP32_WIDTH EN Screen width + +PLUGIN_SQUEEZEESP32_SPECTRUM_SCALE + EN Spectrum scale + +PLUGIN_SQUEEZEESP32_SPECTRUM_SCALE_DESC + EN Sets the scale factor % of spectrum visualizer by halves for better representation. + EN For example, 50 means that 50% of spectrum is displayed in 1/2 of the screen, so it's linear... + EN But 25 means that only 25% of spectrum is displayed in 1/2 of the screen, so it's a sort of log diff --git a/plugin/repo.xml b/plugin/repo.xml index 81067947..1d31dcdf 100644 --- a/plugin/repo.xml +++ b/plugin/repo.xml @@ -1,10 +1,10 @@ - + https://github.com/sle118/squeezelite-esp32 Philippe - 5a35a7b821e887baf869535f113b8b55bbc52a54 + b923bd7dd412d1897eb8be2dec862f91f1e36dc4 philippe_44@outlook.com SqueezeESP32 additional player id (100) http://github.com/sle118/squeezelite-esp32/raw/master/plugin/SqueezeESP32.zip