From 809b55579f14954ad3e1162f298738c9a5edda71 Mon Sep 17 00:00:00 2001 From: philippe44 Date: Mon, 28 Aug 2023 18:59:17 -0700 Subject: [PATCH] add plugin and fix loudness = 0 disable equalizer --- components/squeezelite/equalizer.c | 6 ++-- plugin/SqueezeESP32.zip | Bin 20905 -> 20751 bytes .../plugins/SqueezeESP32/settings/player.html | 33 ++++++++++++++++++ plugin/SqueezeESP32/Player.pm | 10 ++++++ plugin/SqueezeESP32/PlayerSettings.pm | 7 +++- plugin/SqueezeESP32/Plugin.pm | 21 +++++++++++ plugin/SqueezeESP32/install.xml | 2 +- plugin/repo.xml | 4 +-- 8 files changed, 76 insertions(+), 7 deletions(-) diff --git a/components/squeezelite/equalizer.c b/components/squeezelite/equalizer.c index 4038f69e..c772f0d8 100644 --- a/components/squeezelite/equalizer.c +++ b/components/squeezelite/equalizer.c @@ -63,9 +63,9 @@ static const float loudness_envelope_coefficients[EQ_BANDS][POLYNOME_COUNT] = { /**************************************************************************************** * calculate loudness gains */ -static void calculate_loudness(void) { - for (int i = 0; i < EQ_BANDS && equalizer.loudness > 0; i++) { - for (int j = 0; j < POLYNOME_COUNT; j++) { +static void calculate_loudness(void) { + for (int i = 0; i < EQ_BANDS; i++) { + for (int j = 0; j < POLYNOME_COUNT && equalizer.loudness != 0; j++) { equalizer.loudness_gain[i] += loudness_envelope_coefficients[i][j] * pow(equalizer.volume, j); } diff --git a/plugin/SqueezeESP32.zip b/plugin/SqueezeESP32.zip index 68bc264fa67eeb2bb85b6d3a1c8083cbdba22230..9dd0e60be35835dd80785aae10e5a787063db82b 100644 GIT binary patch delta 9896 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 WEkpi^Q-FY={5g;RNa!+ud-@Nq5*Jzk delta 9984 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 uznlO2*Wf?H<^leuMDzAfYcO<3l)^nU>K7kl*p diff --git a/plugin/SqueezeESP32/HTML/EN/plugins/SqueezeESP32/settings/player.html b/plugin/SqueezeESP32/HTML/EN/plugins/SqueezeESP32/settings/player.html index 0ddf2fd6..02409069 100644 --- a/plugin/SqueezeESP32/HTML/EN/plugins/SqueezeESP32/settings/player.html +++ b/plugin/SqueezeESP32/HTML/EN/plugins/SqueezeESP32/settings/player.html @@ -21,6 +21,18 @@ params: ['[% playerid %]', ['squeezeesp32', 'seteq', eqValues.join()]] }); } + + var ldValue = 0; + this.lastLd = this.lastLd || 0; + + ldValue = Ext.get('pref_loudness').dom.value || 0; + + if (ldValue != this.lastLd) { + this.lastLd = ldValue; + SqueezeJS.Controller.request({ + params: ['[% playerid %]', ['squeezeesp32', 'setld', ldValue]] + }); + } } [% END; ELSIF !useExtJS; pageHeaderScripts = BLOCK %] @@ -46,6 +58,23 @@ }) }); } + + var ldValue = 0; + this.lastLd = this.lastLd || 0; + + ldValue = $('pref_loudness').value || 0; + + if (ldValue != this.lastLd) { + this.lastLd = ldValue; + new Ajax.Request('/jsonrpc.js', { + method: 'post', + postBody: JSON.stringify({ + id: 1, + method: 'slim.request', + params: ['[% playerid %]', ['squeezeesp32', 'setld', ldValue]] + }) + }); + } } [% END; END %] @@ -140,6 +169,10 @@ [% END %] [% WRAPPER settingSection %] + [% WRAPPER settingGroup title='Loudness' desc="" %] + + [% END %] + [% WRAPPER settingGroup title='31Hz' desc="" %] [% END %] diff --git a/plugin/SqueezeESP32/Player.pm b/plugin/SqueezeESP32/Player.pm index f21bf38c..cb455c7f 100644 --- a/plugin/SqueezeESP32/Player.pm +++ b/plugin/SqueezeESP32/Player.pm @@ -115,6 +115,7 @@ sub initPrefs { $prefs->client($client)->init( { equalizer => [(0) x 10], + loudness => 0, artwork => undef, led_config => 0, led_visualizer => 0, @@ -216,6 +217,14 @@ sub send_equalizer { $client->sendFrame( eqlz => \$data ); } +sub send_loudness { + my ($client, $loudness) = @_; + + $loudness ||= $prefs->client($client)->get('loudness') || 0; + my $data = pack("c1", $loudness); + $client->sendFrame( loud => \$data ); +} + sub update_equalizer { my ($client, $value, $index) = @_; return if $client->tone_update; @@ -318,6 +327,7 @@ sub reconnect { $client->pluginData('artwork_md5', ''); $client->config_artwork if $client->display->isa("Plugins::SqueezeESP32::Graphics"); $client->send_equalizer; + $client->send_loudness; } # Change the analog output mode between headphone and sub-woofer diff --git a/plugin/SqueezeESP32/PlayerSettings.pm b/plugin/SqueezeESP32/PlayerSettings.pm index 3c1298ae..86cceab2 100644 --- a/plugin/SqueezeESP32/PlayerSettings.pm +++ b/plugin/SqueezeESP32/PlayerSettings.pm @@ -87,6 +87,8 @@ sub handler { $equalizer = [ splice(@$equalizer, 0, 10) ]; $cprefs->set('equalizer', $equalizer); $client->update_tones($equalizer); + + $cprefs->set('loudness', $paramRef->{"pref_loudness"} || 0); } if ($client->hasLED) { @@ -107,7 +109,10 @@ sub handler { $paramRef->{'ledVisualModes'} = Plugins::SqueezeESP32::RgbLed::ledVisualModeOptions($client); } - $paramRef->{'pref_equalizer'} = $cprefs->get('equalizer') if $client->can('depth') && $client->depth == 16; + if ($client->can('depth') && $client->depth == 16) { + $paramRef->{'pref_equalizer'} = $cprefs->get('equalizer'); + $paramRef->{'pref_loudness'} = $cprefs->get('loudness'); + } $paramRef->{'player_ip'} = $client->ip; require Plugins::SqueezeESP32::FirmwareHelper; diff --git a/plugin/SqueezeESP32/Plugin.pm b/plugin/SqueezeESP32/Plugin.pm index 982c9fbc..628d31cf 100644 --- a/plugin/SqueezeESP32/Plugin.pm +++ b/plugin/SqueezeESP32/Plugin.pm @@ -34,6 +34,10 @@ $prefs->setChange(sub { $_[2]->send_equalizer; }, 'equalizer'); +$prefs->setChange(sub { + $_[2]->send_loudness; +}, 'loudness'); + sub initPlugin { my $class = shift; @@ -54,6 +58,7 @@ sub initPlugin { # register a command to set the EQ - without saving the values! Send params as single comma separated list of values Slim::Control::Request::addDispatch(['squeezeesp32', 'seteq', '_eq'], [1, 0, 0, \&setEQ]); + Slim::Control::Request::addDispatch(['squeezeesp32', 'setld', '_ld'], [1, 0, 0, \&setLD]); # Note for some forgetful know-it-all: we need to wrap the callback to make it unique. Otherwise subscriptions would overwrite each other. Slim::Control::Request::subscribe( sub { onNotification(@_) }, [ ['newmetadata'] ] ); @@ -100,4 +105,20 @@ sub setEQ { $client->send_equalizer(\@eqParams); } +sub setLD { + my $request = shift; + + # check this is the correct command. + if ($request->isNotCommand([['squeezeesp32'],['setld']])) { + $request->setStatusBadDispatch(); + return; + } + + # get our parameters + my $client = $request->client(); + my $loudness = $request->getParam('_ld') || 0; + + $client->send_loudness($loudness); +} + 1; diff --git a/plugin/SqueezeESP32/install.xml b/plugin/SqueezeESP32/install.xml index 07adee02..1a107b0f 100644 --- a/plugin/SqueezeESP32/install.xml +++ b/plugin/SqueezeESP32/install.xml @@ -10,6 +10,6 @@ PLUGIN_SQUEEZEESP32 PLUGIN_SQUEEZEESP32_DESC Plugins::SqueezeESP32::Plugin - 0.362 + 0.500 Philippe diff --git a/plugin/repo.xml b/plugin/repo.xml index d58e8f13..2940c002 100644 --- a/plugin/repo.xml +++ b/plugin/repo.xml @@ -1,10 +1,10 @@ - + https://github.com/sle118/squeezelite-esp32 Philippe - 6c6454b1a6c533a74e1b00b69c5a2143d6df536d + a75e49528bc45e6e48b0dbd0b47ce975795e1fba philippe_44@outlook.com SqueezeESP32 additional player id (100/101) http://raw.githubusercontent.com/sle118/squeezelite-esp32/master-v4.3/plugin/SqueezeESP32.zip