From 3288fb651c00eea3b0aba9870c851a99156408e3 Mon Sep 17 00:00:00 2001 From: waker Date: Sat, 12 Mar 2011 15:49:41 +0100 Subject: added replaygain preamp --- plugins/gtkui/callbacks.c | 1 + plugins/gtkui/callbacks.h | 4 ++ plugins/gtkui/deadbeef.glade | 107 +++++++++++++++++++++++++++++++++++++++++++ plugins/gtkui/interface.c | 35 ++++++++++++++ plugins/gtkui/prefwin.c | 12 +++++ replaygain.c | 18 ++++++-- replaygain.h | 2 +- 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 @@ -2646,6 +2646,113 @@ Album + + + True + False + 8 + + + + True + Replaygain preamp: + False + False + GTK_JUSTIFY_LEFT + False + False + 0.5 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 0 + False + False + + + + + + True + -12 dB + False + False + GTK_JUSTIFY_LEFT + False + False + 0.5 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 0 + False + False + + + + + + True + True + True + GTK_POS_BOTTOM + 0 + GTK_UPDATE_CONTINUOUS + False + 0 -12 12 0 0 0 + + + + 0 + True + True + + + + + + True + +12 dB + False + False + GTK_JUSTIFY_LEFT + False + False + 0.5 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 0 + False + False + + + + + 0 + False + False + + + True 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; -- cgit v1.2.3