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 68bc264f..9dd0e60b 100644
Binary files a/plugin/SqueezeESP32.zip and b/plugin/SqueezeESP32.zip differ
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