[Banshee-devel-list] [PATCH] Helix backend Equalizer



Hey,

Here are 2 patches to enable the equalizer in the Helix media engine
backend. One for the helix-dbus-server and one for the media engine
itself.

Please review.

Cheers,
--
Ivan N. Zlatev

Web: http://www.i-nZ.net
GPG Key: http://files.i-nZ.net/i-nZ.asc
"It's all some kind of whacked out conspiracy."
Index: src/Banshee.MediaEngine/Helix/HelixRemotePlayer.cs
===================================================================
RCS file: /cvs/gnome/banshee/src/Banshee.MediaEngine/Helix/HelixRemotePlayer.cs,v
retrieving revision 1.6
diff -u -r1.6 HelixRemotePlayer.cs
--- src/Banshee.MediaEngine/Helix/HelixRemotePlayer.cs	20 Apr 2006 18:05:14 -0000	1.6
+++ src/Banshee.MediaEngine/Helix/HelixRemotePlayer.cs	22 Jul 2006 22:02:44 -0000
@@ -167,6 +167,9 @@
         [Method] public abstract void Shutdown();
         [Method] public abstract void Ping();
         [Method] public abstract bool GetIsLive();
+        [Method] public abstract bool GetIsEqualizerEnabled();
+        [Method] public abstract void SetEqualizerEnabled(bool enabled);
+        [Method] public abstract void SetEqualizerGain(int frequencyId, int value);
     }
     
     public enum ContentState {
Index: src/Banshee.MediaEngine/Helix/HelixRemotePlayerEngine.cs
===================================================================
RCS file: /cvs/gnome/banshee/src/Banshee.MediaEngine/Helix/HelixRemotePlayerEngine.cs,v
retrieving revision 1.6
diff -u -r1.6 HelixRemotePlayerEngine.cs
--- src/Banshee.MediaEngine/Helix/HelixRemotePlayerEngine.cs	20 Apr 2006 18:05:14 -0000	1.6
+++ src/Banshee.MediaEngine/Helix/HelixRemotePlayerEngine.cs	22 Jul 2006 22:02:44 -0000
@@ -3,6 +3,7 @@
  *
  *  Copyright (C) 2006 Novell, Inc
  *  Written by Aaron Bockover <aaron abock org>
+ *             Ivan N. Zlatev <contact i-nZ.net>
  ****************************************************************************/
 
 /*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW: 
@@ -36,7 +37,7 @@
 
 namespace Banshee.MediaEngine.Helix
 {    
-    public class HelixRemotePlayerEngine : PlayerEngine
+    public class HelixRemotePlayerEngine : PlayerEngine, IEqualizer
     {
         private RemotePlayer player;
         private uint timeout_id;
@@ -191,6 +192,72 @@
         private static string [] decoder_capabilities = { "m4a", "mp3", "ram", "ra", "rm", "aac", "mp4" };
         public override IEnumerable ExplicitDecoderCapabilities {
             get { return decoder_capabilities; }
+        }
+
+        // IEqualizer implementation
+        //
+
+        // Helix range (out): -144..144
+        // Plugin range (in): -100 .. 100
+        // Helix = Plugin * 1.44 = Plugin * 144/100
+        //
+        public void SetEqualizerGain (uint frequency, int value)
+        {
+            if (value < -100 || value > 100) {
+                throw new ArgumentOutOfRangeException ("value");
+            }
+            
+            if (player.GetIsEqualizerEnabled () == false) {
+                player.SetEqualizerEnabled (true);
+            }
+
+            int frequencyId = -1;
+            
+            switch (frequency) {
+            case 31:
+                frequencyId = 0;
+                break;
+            case 62:
+                frequencyId = 1;
+                break;
+            case 125:
+                frequencyId = 2;
+                break;
+            case 250:
+                frequencyId = 3;
+                break;
+            case 500:
+                frequencyId = 4;
+                break;
+            case 1000:
+                frequencyId = 5;
+                break;
+            case 2000:
+                frequencyId = 6;
+                break;
+            case 4000:
+                frequencyId = 7;
+                break;
+            case 8000:
+                frequencyId = 8;
+                break;
+            case 16000:
+                frequencyId = 9;
+                break;
+            }
+            
+            if (frequencyId != -1) {
+                player.SetEqualizerGain (frequencyId, (value * 144 / 100));
+            }
+        }
+
+        public uint[] EqualizerFrequencies {
+            get { return new uint[] { 31, 62, 125, 250, 500, 1000, 2000, 4000, 8000, 16000 }; }
+        }
+
+        public int AmplifierLevel {
+            get { return 0; }
+            set { }
         }
     }
 }
Index: src/helix-dbus-server.cc
===================================================================
--- src/helix-dbus-server.cc	(revision 184)
+++ src/helix-dbus-server.cc	(working copy)
@@ -3,6 +3,7 @@
  *
  *  Copyright (C) 2006 Novell, Inc
  *  Written by Aaron Bockover <aaron abock org>
+ *             Ivan N. Zlatev <contact i-nZ.net>
  ****************************************************************************/
 
 /*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW: 
@@ -86,6 +87,9 @@
 METHOD_HANDLER_DEFINE(helix_dbus_server_handle_get_position);
 METHOD_HANDLER_DEFINE(helix_dbus_server_handle_set_position);
 METHOD_HANDLER_DEFINE(helix_dbus_server_handle_get_is_live);
+METHOD_HANDLER_DEFINE(helix_dbus_server_handle_get_is_eq_enabled);
+METHOD_HANDLER_DEFINE(helix_dbus_server_handle_set_eq_enabled);
+METHOD_HANDLER_DEFINE(helix_dbus_server_handle_set_eq_gain);
 
 static HelixDbusMethodVTable method_handler_vtable [] = {
     { "Ping",            DBUS_TYPE_INVALID,   helix_dbus_server_handle_ping },
@@ -102,6 +106,9 @@
     { "GetPosition",     DBUS_TYPE_UINT32,    helix_dbus_server_handle_get_position },
     { "SetPosition",     DBUS_TYPE_BOOLEAN,   helix_dbus_server_handle_set_position },
     { "GetIsLive",       DBUS_TYPE_BOOLEAN,   helix_dbus_server_handle_get_is_live },
+    { "GetIsEqualizerEnabled",  DBUS_TYPE_BOOLEAN,   helix_dbus_server_handle_get_is_eq_enabled },
+    { "SetEqualizerEnabled",    DBUS_TYPE_INVALID,   helix_dbus_server_handle_set_eq_enabled },
+    { "SetEqualizerGain",       DBUS_TYPE_INVALID,   helix_dbus_server_handle_set_eq_gain },
     { NULL,              0,                   NULL }
 };
 
@@ -405,7 +412,37 @@
     *return_value = (gpointer)ClientPlayerIsLive(PLAYER_TOKEN(server->player));
 }
 
+static void 
+helix_dbus_server_handle_get_is_eq_enabled(HelixDbusServer *server, DBusMessage *message, 
+    void **return_value)
+{
+    *return_value = (gpointer)ClientPlayerIsEQEnabled(PLAYER_TOKEN(server->player));
+}
 
+static void 
+helix_dbus_server_handle_set_eq_enabled(HelixDbusServer *server, DBusMessage *message, 
+    void **return_value)
+{
+    gboolean enabled;
+    
+    if(dbus_message_get_args(message, NULL, DBUS_TYPE_BOOLEAN, &enabled, DBUS_TYPE_INVALID)) {
+        ClientPlayerEnableEQ(PLAYER_TOKEN(server->player), enabled);
+    }
+}
+
+static void 
+helix_dbus_server_handle_set_eq_gain(HelixDbusServer *server, DBusMessage *message, 
+    void **return_value)
+{
+    gint frequencyId;
+    gint value;
+    
+    if(dbus_message_get_args(message, NULL, DBUS_TYPE_INT32, &frequencyId, DBUS_TYPE_INT32, &value , DBUS_TYPE_INVALID)) {
+        ClientPlayerSetEQGain(PLAYER_TOKEN(server->player), frequencyId, value);
+    }
+}
+
+
 // public methods
 
 HelixDbusServer *


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]