mirror of
https://github.com/sle118/squeezelite-esp32.git
synced 2025-12-07 12:07:09 +03:00
add plugin and fix loudness = 0 disable equalizer
This commit is contained in:
@@ -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.
@@ -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 %]
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
Reference in New Issue
Block a user