Explorar o código

add plugin and fix loudness = 0 disable equalizer

philippe44 hai 1 ano
pai
achega
809b55579f

+ 3 - 3
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);
 		}

BIN=BIN
plugin/SqueezeESP32.zip


+ 33 - 0
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]]
+			});
+		}
 	}
 </script>
 [% 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>
 [% END; END %]
@@ -140,6 +169,10 @@
 		[% END %]
 
 		[% 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="" %]
 				<input type="text" class="stdedit sliderInput_-13_20" name="pref_equalizer.0" id="pref_equalizer.0" value="[% pref_equalizer.0 || 0 %]" size="2"">
 			[% END %]

+ 10 - 0
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

+ 6 - 1
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;

+ 21 - 0
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;

+ 1 - 1
plugin/SqueezeESP32/install.xml

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

+ 2 - 2
plugin/repo.xml

@@ -1,10 +1,10 @@
 <?xml version='1.0' standalone='yes'?>
 <extensions>
   <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>
       <creator>Philippe</creator>
-      <sha>6c6454b1a6c533a74e1b00b69c5a2143d6df536d</sha>
+      <sha>a75e49528bc45e6e48b0dbd0b47ce975795e1fba</sha>
       <email>philippe_44@outlook.com</email>
       <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>