summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar waker <wakeroid@gmail.com>2011-03-12 15:49:41 +0100
committerGravatar waker <wakeroid@gmail.com>2011-03-12 15:49:41 +0100
commit3288fb651c00eea3b0aba9870c851a99156408e3 (patch)
tree6d2afb131af1bb8eebe6d908e092a4165464878a
parentb08e2c0e508b4f7c93e3c1c40fa56a0bafcee6ef (diff)
added replaygain preamp
-rw-r--r--plugins/gtkui/callbacks.c1
-rw-r--r--plugins/gtkui/callbacks.h4
-rw-r--r--plugins/gtkui/deadbeef.glade107
-rw-r--r--plugins/gtkui/interface.c35
-rw-r--r--plugins/gtkui/prefwin.c12
-rw-r--r--replaygain.c18
-rw-r--r--replaygain.h2
-rw-r--r--streamer.c4
8 files changed, 175 insertions, 8 deletions
diff --git a/plugins/gtkui/callbacks.c b/plugins/gtkui/callbacks.c
index 71ad353f..00ff70c6 100644
--- a/plugins/gtkui/callbacks.c
+++ b/plugins/gtkui/callbacks.c
@@ -1170,3 +1170,4 @@ create_plugin_weblink (gchar *widget_name, gchar *string1, gchar *string2,
gtk_widget_set_sensitive (link, FALSE);
return link;
}
+
diff --git a/plugins/gtkui/callbacks.h b/plugins/gtkui/callbacks.h
index 2e4c8ce6..b5aff3e3 100644
--- a/plugins/gtkui/callbacks.h
+++ b/plugins/gtkui/callbacks.h
@@ -1099,3 +1099,7 @@ gboolean
on_prefwin_map_event (GtkWidget *widget,
GdkEvent *event,
gpointer user_data);
+
+void
+on_replaygain_preamp_value_changed (GtkRange *range,
+ gpointer user_data);
diff --git a/plugins/gtkui/deadbeef.glade b/plugins/gtkui/deadbeef.glade
index bcbcd487..a9fbf8ba 100644
--- a/plugins/gtkui/deadbeef.glade
+++ b/plugins/gtkui/deadbeef.glade
@@ -2647,6 +2647,113 @@ Album</property>
</child>
<child>
+ <widget class="GtkHBox" id="hbox100">
+ <property name="visible">True</property>
+ <property name="homogeneous">False</property>
+ <property name="spacing">8</property>
+
+ <child>
+ <widget class="GtkLabel" id="label124">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Replaygain preamp:</property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0.5</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkLabel" id="label125">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">-12 dB</property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0.5</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkHScale" id="replaygain_preamp">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="draw_value">True</property>
+ <property name="value_pos">GTK_POS_BOTTOM</property>
+ <property name="digits">0</property>
+ <property name="update_policy">GTK_UPDATE_CONTINUOUS</property>
+ <property name="inverted">False</property>
+ <property name="adjustment">0 -12 12 0 0 0</property>
+ <signal name="value_changed" handler="on_replaygain_preamp_value_changed" last_modification_time="Sat, 12 Mar 2011 14:20:29 GMT"/>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkLabel" id="label126">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">+12 dB</property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0.5</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+
+ <child>
<widget class="GtkHBox" id="hbox66">
<property name="visible">True</property>
<property name="homogeneous">False</property>
diff --git a/plugins/gtkui/interface.c b/plugins/gtkui/interface.c
index 9df16523..9240a0fb 100644
--- a/plugins/gtkui/interface.c
+++ b/plugins/gtkui/interface.c
@@ -1656,6 +1656,11 @@ create_prefwin (void)
GtkWidget *label8;
GtkWidget *pref_replaygain_mode;
GtkWidget *pref_replaygain_scale;
+ GtkWidget *hbox100;
+ GtkWidget *label124;
+ GtkWidget *label125;
+ GtkWidget *replaygain_preamp;
+ GtkWidget *label126;
GtkWidget *hbox66;
GtkWidget *cli_add_to_playlist;
GtkWidget *cli_playlist_name;
@@ -1846,6 +1851,28 @@ create_prefwin (void)
gtk_widget_show (pref_replaygain_scale);
gtk_box_pack_start (GTK_BOX (vbox8), pref_replaygain_scale, FALSE, FALSE, 0);
+ hbox100 = gtk_hbox_new (FALSE, 8);
+ gtk_widget_show (hbox100);
+ gtk_box_pack_start (GTK_BOX (vbox8), hbox100, FALSE, FALSE, 0);
+
+ label124 = gtk_label_new (_("Replaygain preamp:"));
+ gtk_widget_show (label124);
+ gtk_box_pack_start (GTK_BOX (hbox100), label124, FALSE, FALSE, 0);
+
+ label125 = gtk_label_new (_("-12 dB"));
+ gtk_widget_show (label125);
+ gtk_box_pack_start (GTK_BOX (hbox100), label125, FALSE, FALSE, 0);
+
+ replaygain_preamp = gtk_hscale_new (GTK_ADJUSTMENT (gtk_adjustment_new (0, -12, 12, 0, 0, 0)));
+ gtk_widget_show (replaygain_preamp);
+ gtk_box_pack_start (GTK_BOX (hbox100), replaygain_preamp, TRUE, TRUE, 0);
+ gtk_scale_set_value_pos (GTK_SCALE (replaygain_preamp), GTK_POS_BOTTOM);
+ gtk_scale_set_digits (GTK_SCALE (replaygain_preamp), 0);
+
+ label126 = gtk_label_new (_("+12 dB"));
+ gtk_widget_show (label126);
+ gtk_box_pack_start (GTK_BOX (hbox100), label126, FALSE, FALSE, 0);
+
hbox66 = gtk_hbox_new (FALSE, 8);
gtk_widget_show (hbox66);
gtk_box_pack_start (GTK_BOX (vbox8), hbox66, FALSE, FALSE, 0);
@@ -2423,6 +2450,9 @@ create_prefwin (void)
g_signal_connect ((gpointer) pref_replaygain_scale, "clicked",
G_CALLBACK (on_pref_replaygain_scale_clicked),
NULL);
+ g_signal_connect ((gpointer) replaygain_preamp, "value_changed",
+ G_CALLBACK (on_replaygain_preamp_value_changed),
+ NULL);
g_signal_connect ((gpointer) cli_add_to_playlist, "toggled",
G_CALLBACK (on_cli_add_to_playlist_toggled),
NULL);
@@ -2570,6 +2600,11 @@ create_prefwin (void)
GLADE_HOOKUP_OBJECT (prefwin, label8, "label8");
GLADE_HOOKUP_OBJECT (prefwin, pref_replaygain_mode, "pref_replaygain_mode");
GLADE_HOOKUP_OBJECT (prefwin, pref_replaygain_scale, "pref_replaygain_scale");
+ GLADE_HOOKUP_OBJECT (prefwin, hbox100, "hbox100");
+ GLADE_HOOKUP_OBJECT (prefwin, label124, "label124");
+ GLADE_HOOKUP_OBJECT (prefwin, label125, "label125");
+ GLADE_HOOKUP_OBJECT (prefwin, replaygain_preamp, "replaygain_preamp");
+ GLADE_HOOKUP_OBJECT (prefwin, label126, "label126");
GLADE_HOOKUP_OBJECT (prefwin, hbox66, "hbox66");
GLADE_HOOKUP_OBJECT (prefwin, cli_add_to_playlist, "cli_add_to_playlist");
GLADE_HOOKUP_OBJECT (prefwin, cli_playlist_name, "cli_playlist_name");
diff --git a/plugins/gtkui/prefwin.c b/plugins/gtkui/prefwin.c
index 45467eff..980f5765 100644
--- a/plugins/gtkui/prefwin.c
+++ b/plugins/gtkui/prefwin.c
@@ -489,6 +489,9 @@ on_preferences_activate (GtkMenuItem *menuitem,
// replaygain_scale
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (lookup_widget (w, "pref_replaygain_scale")), deadbeef->conf_get_int ("replaygain_scale", 1));
+ // replaygain_preamp
+ gtk_range_set_value (GTK_RANGE (lookup_widget (w, "replaygain_preamp")), deadbeef->conf_get_int ("replaygain_preamp", 0));
+
// dsp
dsp_setup_init (prefwin);
@@ -681,6 +684,15 @@ on_pref_replaygain_scale_clicked (GtkButton *button,
deadbeef->sendmessage (M_CONFIG_CHANGED, 0, 0, 0);
}
+void
+on_replaygain_preamp_value_changed (GtkRange *range,
+ gpointer user_data)
+{
+ float val = gtk_range_get_value (range);
+ deadbeef->conf_set_float ("replaygain_preamp", val);
+ deadbeef->sendmessage (M_CONFIG_CHANGED, 0, 0, 0);
+}
+
void
on_pref_close_send_to_tray_clicked (GtkButton *button,
diff --git a/replaygain.c b/replaygain.c
index efe89ba9..50f88535 100644
--- a/replaygain.c
+++ b/replaygain.c
@@ -23,11 +23,14 @@
static int conf_replaygain_mode = 0;
static int conf_replaygain_scale = 1;
+static float conf_replaygain_preamp = 0;
static float rg_albumgain = 1;
static float rg_albumpeak = 1;
static float rg_trackgain = 1;
static float rg_trackpeak = 1;
+static float rg_albumgain_preamp = 1;
+static float rg_trackgain_preamp = 1;
void
replaygain_apply (ddb_waveformat_t *fmt, playItem_t *it, char *bytes, int bytesread) {
@@ -50,15 +53,20 @@ replaygain_apply (ddb_waveformat_t *fmt, playItem_t *it, char *bytes, int bytesr
}
void
-replaygain_set (int mode, int scale) {
+replaygain_set (int mode, int scale, float preamp) {
conf_replaygain_mode = mode;
conf_replaygain_scale = scale;
+ conf_replaygain_preamp = db_to_amp (preamp);
+ rg_albumgain_preamp = rg_albumgain * conf_replaygain_preamp;
+ rg_trackgain_preamp = rg_trackgain * conf_replaygain_preamp;
}
void
replaygain_set_values (float albumgain, float albumpeak, float trackgain, float trackpeak) {
rg_albumgain = db_to_amp (albumgain);
rg_trackgain = db_to_amp (trackgain);
+ rg_albumgain_preamp = rg_albumgain * conf_replaygain_preamp;
+ rg_trackgain_preamp = rg_trackgain * conf_replaygain_preamp;
rg_albumpeak = albumpeak;
rg_trackpeak = trackpeak;
}
@@ -70,7 +78,7 @@ get_int_volume (void) {
if (rg_trackgain == 1) {
return -1;
}
- vol = rg_trackgain * 1000;
+ vol = rg_trackgain_preamp * 1000;
if (conf_replaygain_scale) {
if (vol * rg_trackpeak > 1000) {
vol = 1000 / rg_trackpeak;
@@ -81,7 +89,7 @@ get_int_volume (void) {
if (rg_albumgain == 1) {
return -1;
}
- vol = rg_albumgain * 1000;
+ vol = rg_albumgain_preamp * 1000;
if (conf_replaygain_scale) {
if (vol * rg_albumpeak > 1000) {
vol = 1000 / rg_albumpeak;
@@ -196,7 +204,7 @@ apply_replay_gain_float32 (playItem_t *it, char *bytes, int size) {
if (rg_trackgain == 1) {
return;
}
- vol = rg_trackgain;
+ vol = rg_trackgain_preamp;
if (conf_replaygain_scale) {
if (vol * rg_trackpeak > 1.f) {
vol = 1.f / rg_trackpeak;
@@ -207,7 +215,7 @@ apply_replay_gain_float32 (playItem_t *it, char *bytes, int size) {
if (rg_albumgain == 1) {
return;
}
- vol = rg_albumgain;
+ vol = rg_albumgain_preamp;
if (conf_replaygain_scale) {
if (vol * rg_albumpeak > 1.f) {
vol = 1.f / rg_albumpeak;
diff --git a/replaygain.h b/replaygain.h
index 1ebf79fd..cee57782 100644
--- a/replaygain.h
+++ b/replaygain.h
@@ -25,7 +25,7 @@ void
replaygain_apply (ddb_waveformat_t *fmt, playItem_t *it, char *bytes, int bytesread);
void
-replaygain_set (int mode, int scale);
+replaygain_set (int mode, int scale, float preamp);
void
replaygain_set_values (float albumgain, float albumpeak, float trackgain, float trackpeak);
diff --git a/streamer.c b/streamer.c
index 013e3f62..7e571589 100644
--- a/streamer.c
+++ b/streamer.c
@@ -1399,7 +1399,7 @@ streamer_init (void) {
streamer_dsp_init ();
- replaygain_set (conf_get_int ("replaygain_mode", 0), conf_get_int ("replaygain_scale", 1));
+ replaygain_set (conf_get_int ("replaygain_mode", 0), conf_get_int ("replaygain_scale", 1), conf_get_float ("replaygain_preamp", 0));
streamer_tid = thread_start (streamer_thread, NULL);
return 0;
}
@@ -1742,7 +1742,7 @@ streamer_ok_to_read (int len) {
void
streamer_configchanged (void) {
- replaygain_set (conf_get_int ("replaygain_mode", 0), conf_get_int ("replaygain_scale", 1));
+ replaygain_set (conf_get_int ("replaygain_mode", 0), conf_get_int ("replaygain_scale", 1), conf_get_float ("replaygain_preamp", 0));
pl_set_order (conf_get_int ("playback.order", 0));
if (playing_track) {
playing_track->played = 1;