Revision: 2325
          http://gtkpod.svn.sourceforge.net/gtkpod/?rev=2325&view=rev
Author:   tmzullinger
Date:     2009-04-18 00:09:21 +0000 (Sat, 18 Apr 2009)

Log Message:
-----------
Add preferences for handling ReplayGain

This adds two preference settings, replaygain_offset and
replaygain_mode_album_priority.  The first is a simple offset value that
is added to the ReplayGain value before being converted to a Soundcheck
value and stored in the iTunesDB.  The other setting allows a choice
between Audiofile (aka album) gain and Radio (aka track) gain.

Modified Paths:
--------------
    gtkpod/trunk/ChangeLog
    gtkpod/trunk/data/gtkpod.glade
    gtkpod/trunk/src/mp3file.c
    gtkpod/trunk/src/prefs.c
    gtkpod/trunk/src/prefsdlg.c

Modified: gtkpod/trunk/ChangeLog
===================================================================
--- gtkpod/trunk/ChangeLog      2009-04-18 00:09:09 UTC (rev 2324)
+++ gtkpod/trunk/ChangeLog      2009-04-18 00:09:21 UTC (rev 2325)
@@ -1,5 +1,22 @@
 2009-04-17  Todd Zullinger  <[email protected]>
 
+       Patch from: Author: Greg Carroll <[email protected]>
+
+       * data/gtkpod.glade
+         src/mp3file.c
+         src/prefs.c
+         src/prefsdlg.c:
+         Add preferences for handling ReplayGain.
+
+         This adds two preference settings, replaygain_offset and
+         replaygain_mode_album_priority.  The first is a simple
+         offset value that is added to the ReplayGain value before
+         being converted to a Soundcheck value and stored in the
+         iTunesDB.  The other setting allows a choice between
+         Audiofile (aka album) gain and Radio (aka track) gain.
+
+2009-04-17  Todd Zullinger  <[email protected]>
+
        * src/mp3file.c:
          Add support for reading ReplayGain data in common ID3 tags.
          The order of preference for ReplayGain data is now ID3, APE,

Modified: gtkpod/trunk/data/gtkpod.glade
===================================================================
--- gtkpod/trunk/data/gtkpod.glade      2009-04-18 00:09:09 UTC (rev 2324)
+++ gtkpod/trunk/data/gtkpod.glade      2009-04-18 00:09:21 UTC (rev 2325)
@@ -10440,6 +10440,19 @@
                                     <property name="position">2</property>
                                   </packing>
                                 </child>
+                                <child>
+                                  <widget class="GtkButton" id="replaygain">
+                                    <property name="visible">True</property>
+                                    <property name="can_focus">True</property>
+                                    <property 
name="receives_default">True</property>
+                                    <property name="label" 
translatable="yes">ReplayGain...</property>
+                                    <property name="response_id">0</property>
+                                    <signal name="clicked" 
handler="on_replaygain_clicked"/>
+                                  </widget>
+                                  <packing>
+                                    <property name="position">3</property>
+                                  </packing>
+                                </child>
                               </widget>
                               <packing>
                                 <property name="expand">False</property>
@@ -13654,4 +13667,186 @@
       </widget>
     </child>
   </widget>
+  <widget class="GtkDialog" id="prefs_replaygain_dialog">
+    <property name="border_width">5</property>
+    <property name="title" translatable="yes">ReplayGain Preferences</property>
+    <property name="resizable">False</property>
+    <property name="window_position">GTK_WIN_POS_CENTER_ON_PARENT</property>
+    <property name="icon">gtkpod-icon-48.png</property>
+    <property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property>
+    <property name="has_separator">False</property>
+    <child internal-child="vbox">
+      <widget class="GtkVBox" id="dialog-vbox19">
+        <property name="visible">True</property>
+        <property name="spacing">2</property>
+        <child>
+          <widget class="GtkVBox" id="vbox51">
+            <property name="visible">True</property>
+            <property name="border_width">7</property>
+            <property name="spacing">6</property>
+            <child>
+              <widget class="GtkFrame" id="frame27">
+                <property name="visible">True</property>
+                <property name="label_xalign">0</property>
+                <property name="shadow_type">GTK_SHADOW_NONE</property>
+                <child>
+                  <widget class="GtkAlignment" id="alignment46">
+                    <property name="visible">True</property>
+                    <property name="top_padding">6</property>
+                    <property name="left_padding">12</property>
+                    <child>
+                      <widget class="GtkVBox" id="vbox57">
+                        <property name="visible">True</property>
+                        <property name="spacing">6</property>
+                        <child>
+                          <widget class="GtkRadioButton" id="mode_album">
+                            <property name="visible">True</property>
+                            <property name="can_focus">True</property>
+                            <property name="label" translatable="yes">Album 
gain (formerly "audiophile gain")</property>
+                            <property name="response_id">0</property>
+                            <property name="active">True</property>
+                            <property name="draw_indicator">True</property>
+                            <signal name="toggled" 
handler="on_replaygain_mode_album_toggled"/>
+                          </widget>
+                        </child>
+                        <child>
+                          <widget class="GtkRadioButton" id="mode_track">
+                            <property name="visible">True</property>
+                            <property name="can_focus">True</property>
+                            <property name="label" translatable="yes">Track 
gain (formerly "radio gain")</property>
+                            <property name="response_id">0</property>
+                            <property name="active">True</property>
+                            <property name="draw_indicator">True</property>
+                            <property name="group">mode_album</property>
+                          </widget>
+                          <packing>
+                            <property name="position">1</property>
+                          </packing>
+                        </child>
+                      </widget>
+                    </child>
+                  </widget>
+                </child>
+                <child>
+                  <widget class="GtkLabel" id="label120">
+                    <property name="visible">True</property>
+                    <property name="label" 
translatable="yes">&lt;b&gt;Preferred gain type&lt;/b&gt;</property>
+                    <property name="use_markup">True</property>
+                  </widget>
+                  <packing>
+                    <property name="type">label_item</property>
+                  </packing>
+                </child>
+              </widget>
+              <packing>
+                <property name="expand">False</property>
+                <property name="fill">False</property>
+              </packing>
+            </child>
+            <child>
+              <widget class="GtkFrame" id="frame28">
+                <property name="visible">True</property>
+                <property name="has_tooltip">True</property>
+                <property name="label_xalign">0</property>
+                <property name="shadow_type">GTK_SHADOW_NONE</property>
+                <child>
+                  <widget class="GtkAlignment" id="alignment49">
+                    <property name="visible">True</property>
+                    <property name="top_padding">6</property>
+                    <property name="left_padding">12</property>
+                    <child>
+                      <widget class="GtkHBox" id="hbox52">
+                        <property name="visible">True</property>
+                        <property name="spacing">6</property>
+                        <child>
+                          <widget class="GtkSpinButton" id="replaygain_offset">
+                            <property name="visible">True</property>
+                            <property name="can_focus">True</property>
+                            <property name="events">GDK_POINTER_MOTION_MASK | 
GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | 
GDK_BUTTON_RELEASE_MASK</property>
+                            <property name="adjustment">0 -20 20 1 10 
0</property>
+                            <property name="climb_rate">1</property>
+                            <signal name="value_changed" 
handler="on_replaygain_offset_value_changed"/>
+                          </widget>
+                          <packing>
+                            <property name="expand">False</property>
+                            <property name="fill">False</property>
+                          </packing>
+                        </child>
+                        <child>
+                          <widget class="GtkLabel" id="label124">
+                            <property name="visible">True</property>
+                            <property name="label" 
translatable="yes">dB</property>
+                          </widget>
+                          <packing>
+                            <property name="expand">False</property>
+                            <property name="fill">False</property>
+                            <property name="position">1</property>
+                          </packing>
+                        </child>
+                      </widget>
+                    </child>
+                  </widget>
+                </child>
+                <child>
+                  <widget class="GtkLabel" id="label125">
+                    <property name="visible">True</property>
+                    <property name="label" translatable="yes">&lt;b&gt;Offset 
to add to ReplayGain&lt;/b&gt;</property>
+                    <property name="use_markup">True</property>
+                  </widget>
+                  <packing>
+                    <property name="type">label_item</property>
+                  </packing>
+                </child>
+              </widget>
+              <packing>
+                <property name="expand">False</property>
+                <property name="fill">False</property>
+                <property name="position">1</property>
+              </packing>
+            </child>
+            <child>
+              <widget class="GtkVBox" id="vbox51">
+                <property name="visible">True</property>
+                <child>
+                  <widget class="GtkLabel" id="label51">
+                    <property name="visible">True</property>
+                    <property name="xalign">0</property>
+                    <property name="label" translatable="yes">These settings 
will only be applied to newly added or updated tracks. This could result in 
tracks that are normalized to different levels until updated.</property>
+                    <property name="wrap">True</property>
+                  </widget>
+                </child>
+              </widget>
+              <packing>
+                <property name="expand">False</property>
+                <property name="position">2</property>
+              </packing>
+            </child>
+          </widget>
+          <packing>
+            <property name="position">1</property>
+          </packing>
+        </child>
+        <child internal-child="action_area">
+          <widget class="GtkHButtonBox" id="dialog-action_area19">
+            <property name="visible">True</property>
+            <property name="layout_style">GTK_BUTTONBOX_END</property>
+            <child>
+              <widget class="GtkButton" id="rg_close">
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">True</property>
+                <property name="label" translatable="yes">gtk-close</property>
+                <property name="use_stock">True</property>
+                <property name="response_id">0</property>
+              </widget>
+            </child>
+          </widget>
+          <packing>
+            <property name="expand">False</property>
+            <property name="pack_type">GTK_PACK_END</property>
+          </packing>
+        </child>
+      </widget>
+    </child>
+  </widget>
 </glade-interface>

Modified: gtkpod/trunk/src/mp3file.c
===================================================================
--- gtkpod/trunk/src/mp3file.c  2009-04-18 00:09:09 UTC (rev 2324)
+++ gtkpod/trunk/src/mp3file.c  2009-04-18 00:09:21 UTC (rev 2325)
@@ -199,6 +199,7 @@
 #include "itdb.h"
 #include "file.h"
 #include "misc.h"
+#include "prefs.h"
 
 
 /* MIN_CONSEC_GOOD_FRAMES defines how many consecutive valid MP3 frames
@@ -2402,7 +2403,12 @@
 gboolean mp3_read_soundcheck (const gchar *path, Track *track)
 {
     GainData gd;
+    gint replaygain_offset;
+    gint replaygain_mode_album_priority;
 
+    replaygain_offset = prefs_get_int ("replaygain_offset");
+    replaygain_mode_album_priority = prefs_get_int 
("replaygain_mode_album_priority");
+
     g_return_val_if_fail (track, FALSE);
 
     memset (&gd, 0, sizeof (GainData));
@@ -2420,16 +2426,16 @@
     else
        return FALSE;
 
-    if (gd.audiophile_gain_set)
+    if (gd.audiophile_gain_set && replaygain_mode_album_priority)
     {
        DEBUG ("Setting Soundcheck value from album ReplayGain\n");
-       track->soundcheck = replaygain_to_soundcheck (gd.audiophile_gain);
+       track->soundcheck = replaygain_to_soundcheck (gd.audiophile_gain + 
replaygain_offset);
        return TRUE;
     }
     if (gd.radio_gain_set)
     {
        DEBUG ("Setting Soundcheck value from radio ReplayGain\n");
-       track->soundcheck = replaygain_to_soundcheck (gd.radio_gain);
+       track->soundcheck = replaygain_to_soundcheck (gd.radio_gain + 
replaygain_offset);
        return TRUE;
     }
 

Modified: gtkpod/trunk/src/prefs.c
===================================================================
--- gtkpod/trunk/src/prefs.c    2009-04-18 00:09:09 UTC (rev 2324)
+++ gtkpod/trunk/src/prefs.c    2009-04-18 00:09:21 UTC (rev 2325)
@@ -321,9 +321,13 @@
     prefs_set_int("pm_sort", SORT_NONE);
     prefs_set_int("tm_sortcol", TM_COLUMN_TITLE);
     prefs_set_int("tm_sort", SORT_NONE);
-       
-       /* New conversion preferences */
-       prefs_set_int("conversion_target_format", TARGET_FORMAT_MP3);
+
+    /* New conversion preferences */
+    prefs_set_int("conversion_target_format", TARGET_FORMAT_MP3);
+
+    /* ReplayGain prefs */
+    prefs_set_int("replaygain_offset", 0);
+    prefs_set_int("replaygain_mode_album_priority", TRUE);
 }
 
 /* Initialize default variable-length list entries */

Modified: gtkpod/trunk/src/prefsdlg.c
===================================================================
--- gtkpod/trunk/src/prefsdlg.c 2009-04-18 00:09:09 UTC (rev 2324)
+++ gtkpod/trunk/src/prefsdlg.c 2009-04-18 00:09:21 UTC (rev 2325)
@@ -1294,3 +1294,46 @@
 {
        sort_window_create ();
 }
+
+/*
+       glade callback
+*/
+G_MODULE_EXPORT void on_replaygain_clicked (GtkButton *sender, gpointer e)
+{
+       GladeXML *xml = gtkpod_xml_new (xml_file, "prefs_replaygain_dialog");
+       GtkWidget *dlg = gtkpod_xml_get_widget (xml, "prefs_replaygain_dialog");
+       GtkWidget *mode_album_radio = gtkpod_xml_get_widget (xml, "mode_album");
+       GtkWidget *mode_track_radio = gtkpod_xml_get_widget (xml, "mode_track");
+
+       gtk_window_set_transient_for (GTK_WINDOW (dlg), GTK_WINDOW 
(prefs_dialog));
+
+       gtk_spin_button_set_value (GTK_SPIN_BUTTON (gtkpod_xml_get_widget (xml, 
"replaygain_offset")), prefs_get_int("replaygain_offset"));
+
+       if(prefs_get_int("replaygain_mode_album_priority"))
+               gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON 
(mode_album_radio), TRUE);
+       else
+               gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON 
(mode_track_radio), TRUE);
+
+       glade_xml_signal_autoconnect (xml);
+       gtk_dialog_run (GTK_DIALOG (dlg));
+       gtk_widget_destroy (dlg);
+       g_object_unref (xml);
+}
+
+/*
+       glade callback
+*/
+G_MODULE_EXPORT void on_replaygain_mode_album_toggled (GtkToggleButton 
*sender, gpointer e)
+{
+       gboolean active = gtk_toggle_button_get_active (sender);
+
+       prefs_set_int ("replaygain_mode_album_priority", active);
+}
+
+/*
+       glade callback
+*/
+G_MODULE_EXPORT void on_replaygain_offset_value_changed (GtkSpinButton 
*sender, gpointer e)
+{
+    prefs_set_int ("replaygain_offset", gtk_spin_button_get_value_as_int 
(sender));
+}


This was sent by the SourceForge.net collaborative development platform, the 
world's largest Open Source development site.

------------------------------------------------------------------------------
Stay on top of everything new and different, both inside and 
around Java (TM) technology - register by April 22, and save
$200 on the JavaOne (SM) conference, June 2-5, 2009, San Francisco.
300 plus technical and hands-on sessions. Register today. 
Use priority code J9JMT32. http://p.sf.net/sfu/p
_______________________________________________
gtkpod-cvs2 mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/gtkpod-cvs2

Reply via email to