From 3c317b0b861cb6b267f33c644a1bb0f739e6694b Mon Sep 17 00:00:00 2001 From: Philippe G Date: Wed, 7 Oct 2020 14:48:58 -0700 Subject: [PATCH] equalizer fix --- plugin/SqueezeESP32.zip | Bin 11701 -> 11709 bytes plugin/SqueezeESP32/Player.pm | 25 +++++++++++++++-- plugin/SqueezeESP32/PlayerSettings.pm | 6 ++-- plugin/SqueezeESP32/Plugin.pm | 38 ++++---------------------- plugin/SqueezeESP32/install.xml | 2 +- plugin/repo.xml | 4 +-- 6 files changed, 34 insertions(+), 41 deletions(-) diff --git a/plugin/SqueezeESP32.zip b/plugin/SqueezeESP32.zip index 9c2052936a721afcbc2371c1a857ac639b23d106..a13bded0aa4cb0af704d7858f97bd417f57a4237 100644 GIT binary patch delta 2390 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 diff --git a/plugin/SqueezeESP32/Player.pm b/plugin/SqueezeESP32/Player.pm index 78eba318..ef25eeec 100644 --- a/plugin/SqueezeESP32/Player.pm +++ b/plugin/SqueezeESP32/Player.pm @@ -91,12 +91,19 @@ sub init { } $client->SUPER::init(@_); - $client->config_artwork; -} + main::INFOLOG && $log->is_info && $log->info("SqueezeESP player connected: " . $client->id); +} sub initPrefs { my $client = shift; + $sprefs->client($client)->init($defaultPrefs); + + $prefs->client($client)->init( { + equalizer => [(0) x 10], + artwork => 0, + } ); + $client->SUPER::initPrefs; } @@ -146,6 +153,15 @@ sub treble { return $value; } +sub send_equalizer { + my ($client, $equalizer) = @_; + + $equalizer ||= $prefs->client($client)->get('equalizer') || [(0) x 10]; + my $size = @$equalizer; + my $data = pack("c[$size]", @{$equalizer}); + $client->sendFrame( eqlz => \$data ); +} + sub update_equalizer { my ($client, $value, $index) = @_; return if $client->tone_update; @@ -240,8 +256,11 @@ sub config_artwork { sub reconnect { my $client = shift; - $client->pluginData('artwork_md5', ''); $client->SUPER::reconnect(@_); + + $client->pluginData('artwork_md5', ''); + $client->config_artwork; + $client->send_equalizer; } # Change the analog output mode between headphone and sub-woofer diff --git a/plugin/SqueezeESP32/PlayerSettings.pm b/plugin/SqueezeESP32/PlayerSettings.pm index cde4bb0c..d4a4e2d6 100644 --- a/plugin/SqueezeESP32/PlayerSettings.pm +++ b/plugin/SqueezeESP32/PlayerSettings.pm @@ -31,7 +31,7 @@ sub page { sub prefs { my ($class, $client) = @_; my @prefs; - push @prefs, qw(width small_VU) if defined $client->displayWidth; + push @prefs, qw(width small_VU) if $client->displayWidth; return ($prefs->client($client), @prefs); } @@ -41,7 +41,7 @@ sub handler { my ($cprefs, @prefs) = $class->prefs($client); if ($paramRef->{'saveSettings'}) { - if (defined $client->displayWidth) { + if ($client->displayWidth) { $cprefs->set('small_VU', $paramRef->{'pref_small_VU'} || 15); my $spectrum = { scale => $paramRef->{'pref_spectrum_scale'} || 25, @@ -76,7 +76,7 @@ sub handler { $client->update_tones($equalizer); } - if (defined $client->displayWidth) { + if ($client->displayWidth) { # the Settings super class can't handle anything but scalar values # we need to populate the $paramRef for the other prefs manually $paramRef->{'pref_spectrum'} = $cprefs->get('spectrum'); diff --git a/plugin/SqueezeESP32/Plugin.pm b/plugin/SqueezeESP32/Plugin.pm index e2b13573..007f65f4 100644 --- a/plugin/SqueezeESP32/Plugin.pm +++ b/plugin/SqueezeESP32/Plugin.pm @@ -25,7 +25,7 @@ $prefs->migrateClient(1, sub { }); $prefs->setChange(sub { - send_equalizer($_[2]); + $_[2]->send_equalizer; }, 'equalizer'); sub initPlugin { @@ -40,8 +40,10 @@ sub initPlugin { } $class->SUPER::initPlugin(@_); - Slim::Networking::Slimproto::addPlayerClass($class, 100, 'squeezeesp32', { client => 'Plugins::SqueezeESP32::Player', display => 'Plugins::SqueezeESP32::Graphics' }); - main::INFOLOG && $log->is_info && $log->info("Added class 100 for SqueezeESP32"); + # no name can be a subset of others due to a bug in addPlayerClass + Slim::Networking::Slimproto::addPlayerClass($class, 100, 'squeezeesp32-basic', { client => 'Plugins::SqueezeESP32::Player', display => 'Plugins::SqueezeESP32::Graphics' }); + Slim::Networking::Slimproto::addPlayerClass($class, 101, 'squeezeesp32-graphic', { client => 'Plugins::SqueezeESP32::Player', display => 'Slim::Display::NoDisplay' }); + main::INFOLOG && $log->is_info && $log->info("Added class 100 and 101 for SqueezeESP32"); # 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]); @@ -50,9 +52,6 @@ sub initPlugin { Slim::Control::Request::subscribe( sub { onNotification(@_) }, [ ['newmetadata'] ] ); Slim::Control::Request::subscribe( sub { onNotification(@_) }, [ ['playlist'], ['open', 'newsong'] ]); Slim::Control::Request::subscribe( \&onStopClear, [ ['playlist'], ['stop', 'clear'] ]); - - # the custom player class is only initialized if it has a display - thus we need to listen to connect events in order to initializes other player prefs - Slim::Control::Request::subscribe( \&onPlayer,[ ['client'], [ 'new', 'reconnect' ] ] ); } sub onStopClear { @@ -64,20 +63,6 @@ sub onStopClear { } } -sub onPlayer { - my $request = shift; - my $client = $request->client || return; - - if ($client->model eq 'squeezeesp32') { - main::INFOLOG && $log->is_info && $log->info("SqueezeESP player connected: " . $client->id); - - $prefs->client($client)->init( { - equalizer => [(0) x 10], - } ); - send_equalizer($client); - } -} - sub onNotification { my $request = shift; my $client = $request->client || return; @@ -104,18 +89,7 @@ sub setEQ { $eqParams[$x] ||= 0; } - send_equalizer($client, \@eqParams); -} - -sub send_equalizer { - my ($client, $equalizer) = @_; - - if ($client->model eq 'squeezeesp32') { - $equalizer ||= $prefs->client($client)->get('equalizer') || [(0) x 10]; - my $size = @$equalizer; - my $data = pack("c[$size]", @{$equalizer}); - $client->sendFrame( eqlz => \$data ); - } + $client->send_equalizer(\@eqParams); } 1; diff --git a/plugin/SqueezeESP32/install.xml b/plugin/SqueezeESP32/install.xml index ef8c3894..59a0ca49 100644 --- a/plugin/SqueezeESP32/install.xml +++ b/plugin/SqueezeESP32/install.xml @@ -10,6 +10,6 @@ PLUGIN_SQUEEZEESP32 PLUGIN_SQUEEZEESP32_DESC Plugins::SqueezeESP32::Plugin - 0.104 + 0.201 Philippe diff --git a/plugin/repo.xml b/plugin/repo.xml index a9a90fa7..19917eec 100644 --- a/plugin/repo.xml +++ b/plugin/repo.xml @@ -1,10 +1,10 @@ - + https://github.com/sle118/squeezelite-esp32 Philippe - ab2d65f5ba8e73f0f78a1a8650af19ebb1e8e724 + c7134a3f03fbb836c48c929700ad7765854644f7 philippe_44@outlook.com SqueezeESP32 additional player id (100) http://github.com/sle118/squeezelite-esp32/raw/master/plugin/SqueezeESP32.zip