add plugin and fix loudness = 0 disable equalizer

This commit is contained in:
philippe44
2023-08-28 18:59:17 -07:00
parent 85a3bf8836
commit 809b55579f
8 changed files with 76 additions and 7 deletions

View File

@@ -64,8 +64,8 @@ static const float loudness_envelope_coefficients[EQ_BANDS][POLYNOME_COUNT] = {
* calculate loudness gains * calculate loudness gains
*/ */
static void calculate_loudness(void) { static void calculate_loudness(void) {
for (int i = 0; i < EQ_BANDS && equalizer.loudness > 0; i++) { for (int i = 0; i < EQ_BANDS; i++) {
for (int j = 0; j < POLYNOME_COUNT; j++) { for (int j = 0; j < POLYNOME_COUNT && equalizer.loudness != 0; j++) {
equalizer.loudness_gain[i] += equalizer.loudness_gain[i] +=
loudness_envelope_coefficients[i][j] * pow(equalizer.volume, j); loudness_envelope_coefficients[i][j] * pow(equalizer.volume, j);
} }

Binary file not shown.

View File

@@ -21,6 +21,18 @@
params: ['[% playerid %]', ['squeezeesp32', 'seteq', eqValues.join()]] 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]]
});
}
} }
</script> </script>
[% END; ELSIF !useExtJS; pageHeaderScripts = BLOCK %] [% 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]]
})
});
}
} }
</script> </script>
[% END; END %] [% END; END %]
@@ -140,6 +169,10 @@
[% END %] [% END %]
[% WRAPPER settingSection %] [% WRAPPER settingSection %]
[% WRAPPER settingGroup title='Loudness' desc="" %]
<input type="text" class="stdedit sliderInput_0_10" name="pref_loudness" id="pref_loudness" value="[% pref_loudness || 0 %]" size="2"">
[% END %]
[% WRAPPER settingGroup title='31Hz' desc="" %] [% WRAPPER settingGroup title='31Hz' desc="" %]
<input type="text" class="stdedit sliderInput_-13_20" name="pref_equalizer.0" id="pref_equalizer.0" value="[% pref_equalizer.0 || 0 %]" size="2""> <input type="text" class="stdedit sliderInput_-13_20" name="pref_equalizer.0" id="pref_equalizer.0" value="[% pref_equalizer.0 || 0 %]" size="2"">
[% END %] [% END %]

View File

@@ -115,6 +115,7 @@ sub initPrefs {
$prefs->client($client)->init( { $prefs->client($client)->init( {
equalizer => [(0) x 10], equalizer => [(0) x 10],
loudness => 0,
artwork => undef, artwork => undef,
led_config => 0, led_config => 0,
led_visualizer => 0, led_visualizer => 0,
@@ -216,6 +217,14 @@ sub send_equalizer {
$client->sendFrame( eqlz => \$data ); $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 { sub update_equalizer {
my ($client, $value, $index) = @_; my ($client, $value, $index) = @_;
return if $client->tone_update; return if $client->tone_update;
@@ -318,6 +327,7 @@ sub reconnect {
$client->pluginData('artwork_md5', ''); $client->pluginData('artwork_md5', '');
$client->config_artwork if $client->display->isa("Plugins::SqueezeESP32::Graphics"); $client->config_artwork if $client->display->isa("Plugins::SqueezeESP32::Graphics");
$client->send_equalizer; $client->send_equalizer;
$client->send_loudness;
} }
# Change the analog output mode between headphone and sub-woofer # Change the analog output mode between headphone and sub-woofer

View File

@@ -87,6 +87,8 @@ sub handler {
$equalizer = [ splice(@$equalizer, 0, 10) ]; $equalizer = [ splice(@$equalizer, 0, 10) ];
$cprefs->set('equalizer', $equalizer); $cprefs->set('equalizer', $equalizer);
$client->update_tones($equalizer); $client->update_tones($equalizer);
$cprefs->set('loudness', $paramRef->{"pref_loudness"} || 0);
} }
if ($client->hasLED) { if ($client->hasLED) {
@@ -107,7 +109,10 @@ sub handler {
$paramRef->{'ledVisualModes'} = Plugins::SqueezeESP32::RgbLed::ledVisualModeOptions($client); $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; $paramRef->{'player_ip'} = $client->ip;
require Plugins::SqueezeESP32::FirmwareHelper; require Plugins::SqueezeESP32::FirmwareHelper;

View File

@@ -34,6 +34,10 @@ $prefs->setChange(sub {
$_[2]->send_equalizer; $_[2]->send_equalizer;
}, 'equalizer'); }, 'equalizer');
$prefs->setChange(sub {
$_[2]->send_loudness;
}, 'loudness');
sub initPlugin { sub initPlugin {
my $class = shift; 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 # 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', '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. # 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'] ] ); Slim::Control::Request::subscribe( sub { onNotification(@_) }, [ ['newmetadata'] ] );
@@ -100,4 +105,20 @@ sub setEQ {
$client->send_equalizer(\@eqParams); $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; 1;

View File

@@ -10,6 +10,6 @@
<name>PLUGIN_SQUEEZEESP32</name> <name>PLUGIN_SQUEEZEESP32</name>
<description>PLUGIN_SQUEEZEESP32_DESC</description> <description>PLUGIN_SQUEEZEESP32_DESC</description>
<module>Plugins::SqueezeESP32::Plugin</module> <module>Plugins::SqueezeESP32::Plugin</module>
<version>0.362</version> <version>0.500</version>
<creator>Philippe</creator> <creator>Philippe</creator>
</extensions> </extensions>

View File

@@ -1,10 +1,10 @@
<?xml version='1.0' standalone='yes'?> <?xml version='1.0' standalone='yes'?>
<extensions> <extensions>
<plugins> <plugins>
<plugin version="0.362" name="SqueezeESP32" minTarget="7.9" maxTarget="*"> <plugin version="0.500" name="SqueezeESP32" minTarget="7.9" maxTarget="*">
<link>https://github.com/sle118/squeezelite-esp32</link> <link>https://github.com/sle118/squeezelite-esp32</link>
<creator>Philippe</creator> <creator>Philippe</creator>
<sha>6c6454b1a6c533a74e1b00b69c5a2143d6df536d</sha> <sha>a75e49528bc45e6e48b0dbd0b47ce975795e1fba</sha>
<email>philippe_44@outlook.com</email> <email>philippe_44@outlook.com</email>
<desc lang="EN">SqueezeESP32 additional player id (100/101)</desc> <desc lang="EN">SqueezeESP32 additional player id (100/101)</desc>
<url>http://raw.githubusercontent.com/sle118/squeezelite-esp32/master-v4.3/plugin/SqueezeESP32.zip</url> <url>http://raw.githubusercontent.com/sle118/squeezelite-esp32/master-v4.3/plugin/SqueezeESP32.zip</url>