diff options
author | waker <wakeroid@gmail.com> | 2011-03-12 15:49:41 +0100 |
---|---|---|
committer | waker <wakeroid@gmail.com> | 2011-03-12 15:49:41 +0100 |
commit | 3288fb651c00eea3b0aba9870c851a99156408e3 (patch) | |
tree | 6d2afb131af1bb8eebe6d908e092a4165464878a | |
parent | b08e2c0e508b4f7c93e3c1c40fa56a0bafcee6ef (diff) |
added replaygain preamp
-rw-r--r-- | plugins/gtkui/callbacks.c | 1 | ||||
-rw-r--r-- | plugins/gtkui/callbacks.h | 4 | ||||
-rw-r--r-- | plugins/gtkui/deadbeef.glade | 107 | ||||
-rw-r--r-- | plugins/gtkui/interface.c | 35 | ||||
-rw-r--r-- | plugins/gtkui/prefwin.c | 12 | ||||
-rw-r--r-- | replaygain.c | 18 | ||||
-rw-r--r-- | replaygain.h | 2 | ||||
-rw-r--r-- | streamer.c | 4 |
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); @@ -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; |