diff options
author | Alexey Yakovenko <wakeroid@gmail.com> | 2010-04-07 21:20:43 +0200 |
---|---|---|
committer | Alexey Yakovenko <wakeroid@gmail.com> | 2010-04-07 21:20:43 +0200 |
commit | decdfd59ce2bf0427b8bfa8d6e6e79415f552e43 (patch) | |
tree | 273be81b4896c64990eec1fc77bf7f281f8524f6 /plugins | |
parent | 018dac7318c89c0751744f026166318d078f4b8d (diff) |
eq preset management
Diffstat (limited to 'plugins')
-rw-r--r-- | plugins/gtkui/callbacks.c | 18 | ||||
-rw-r--r-- | plugins/gtkui/eq.c | 200 |
2 files changed, 200 insertions, 18 deletions
diff --git a/plugins/gtkui/callbacks.c b/plugins/gtkui/callbacks.c index a582eebf..90eb7c1a 100644 --- a/plugins/gtkui/callbacks.c +++ b/plugins/gtkui/callbacks.c @@ -377,24 +377,6 @@ save_playlist_as (void) { gtk_widget_destroy (dlg); if (fname) { -// the code below cannot be used, because it breaks gtk overwrite confirmation -#if 0 - // check extension and append .dbpl if none - size_t sz = strlen (fname); - char ext[] = ".dbpl"; - const char *p = fname + sz - 1; - while (p > fname && *p != '/' && *p != '.') { - p--; - } - if (*p != '.') { - // extension not found - char *n = g_malloc (sz + sizeof (ext)); - memcpy (n, fname, sz); - memcpy (n+sz, ext, sizeof (ext)); - g_free (fname); - fname = n; - } -#endif int res = deadbeef->pl_save (fname); if (res >= 0 && strlen (fname) < 1024) { strcpy (last_playlist_save_name, fname); diff --git a/plugins/gtkui/eq.c b/plugins/gtkui/eq.c index fda0a888..f558d8c7 100644 --- a/plugins/gtkui/eq.c +++ b/plugins/gtkui/eq.c @@ -19,6 +19,7 @@ #include <gtk/gtk.h> #include <string.h> #include <math.h> +#include <stdlib.h> #include "gtkui.h" #include "support.h" #include "../supereq/supereq.h" @@ -83,13 +84,191 @@ on_zero_all_clicked (GtkButton *button, } void +on_zero_preamp_clicked (GtkButton *button, + gpointer user_data) { + if (eqwin) { + DB_supereq_dsp_t *eq = get_supereq_plugin (); + eq->set_preamp (1); + ddb_equalizer_set_preamp (DDB_EQUALIZER (eqwin), 0); + gdk_window_invalidate_rect (eqwin->window, NULL, FALSE); + } +} + +void +on_zero_bands_clicked (GtkButton *button, + gpointer user_data) { + if (eqwin) { + DB_supereq_dsp_t *eq = get_supereq_plugin (); + for (int i = 0; i < 18; i++) { + ddb_equalizer_set_band (DDB_EQUALIZER (eqwin), i, 0); + eq->set_band (i, 1); + } + gdk_window_invalidate_rect (eqwin->window, NULL, FALSE); + } +} + +void on_save_preset_clicked (GtkButton *button, gpointer user_data) { + GtkWidget *dlg = gtk_file_chooser_dialog_new ("Save DeaDBeeF EQ Preset", GTK_WINDOW (mainwin), GTK_FILE_CHOOSER_ACTION_SAVE, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_SAVE, GTK_RESPONSE_OK, NULL); + + gtk_file_chooser_set_do_overwrite_confirmation (GTK_FILE_CHOOSER (dlg), TRUE); + gtk_file_chooser_set_current_name (GTK_FILE_CHOOSER (dlg), "untitled.ddbeq"); + + GtkFileFilter* flt; + flt = gtk_file_filter_new (); + gtk_file_filter_set_name (flt, "DeaDBeeF preset files (*.ddbeq)"); + gtk_file_filter_add_pattern (flt, "*.ddbeq"); + + gtk_file_chooser_add_filter (GTK_FILE_CHOOSER (dlg), flt); + + if (gtk_dialog_run (GTK_DIALOG (dlg)) == GTK_RESPONSE_OK) + { + gchar *fname = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (dlg)); + gtk_widget_destroy (dlg); + + if (fname) { + FILE *fp = fopen (fname, "w+b"); + if (fp) { + DB_supereq_dsp_t *eq = get_supereq_plugin (); + for (int i = 0; i < 18; i++) { + fprintf (fp, "%f\n", amp_to_db (eq->get_band (i))); + } + fprintf (fp, "%f\n", amp_to_db (eq->get_preamp ())); + fclose (fp); + } + g_free (fname); + } + } + else { + gtk_widget_destroy (dlg); + } } void on_load_preset_clicked (GtkButton *button, gpointer user_data) { + GtkWidget *dlg = gtk_file_chooser_dialog_new ("Load DeaDBeeF EQ Preset...", GTK_WINDOW (mainwin), GTK_FILE_CHOOSER_ACTION_OPEN, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_OPEN, GTK_RESPONSE_OK, NULL); + + GtkFileFilter* flt; + flt = gtk_file_filter_new (); + gtk_file_filter_set_name (flt, "DeaDBeeF EQ presets (*.ddbeq)"); + gtk_file_filter_add_pattern (flt, "*.ddbeq"); + gtk_file_chooser_add_filter (GTK_FILE_CHOOSER (dlg), flt); + + gtk_file_chooser_set_select_multiple (GTK_FILE_CHOOSER (dlg), FALSE); + // restore folder + gtk_file_chooser_set_current_folder_uri (GTK_FILE_CHOOSER (dlg), deadbeef->conf_get_str ("filechooser.lastdir", "")); + int response = gtk_dialog_run (GTK_DIALOG (dlg)); + // store folder + gchar *folder = gtk_file_chooser_get_current_folder_uri (GTK_FILE_CHOOSER (dlg)); + if (folder) { + deadbeef->conf_set_str ("filechooser.lastdir", folder); + g_free (folder); + } + if (response == GTK_RESPONSE_OK) + { + gchar *fname = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (dlg)); + if (fname) { + FILE *fp = fopen (fname, "rt"); + if (fp) { + float vals[19]; // float dBs + int i = 0; + while (i < 19) { + char tmp[20]; + char *out = fgets (tmp, sizeof (tmp), fp); + if (!out) { + break; + } + vals[i] = atof (tmp); + i++; + } + fclose (fp); + if (i == 19) { + // apply and save config + DB_supereq_dsp_t *eq = get_supereq_plugin (); + if (eq) { + eq->set_preamp (db_to_amp (vals[18])); + ddb_equalizer_set_preamp (DDB_EQUALIZER (eqwin), vals[18]); + for (int i = 0; i < 18; i++) { + ddb_equalizer_set_band (DDB_EQUALIZER (eqwin), i, vals[i]); + eq->set_band (i, db_to_amp (vals[i])); + } + gdk_window_invalidate_rect (eqwin->window, NULL, FALSE); + deadbeef->conf_save (); + } + } + else { + fprintf (stderr, "[eq] corrupted DeaDBeeF preset file, discarded\n"); + } + } + g_free (fname); + } + } + gtk_widget_destroy (dlg); +} + +void +on_import_fb2k_preset_clicked (GtkButton *button, + gpointer user_data) { + GtkWidget *dlg = gtk_file_chooser_dialog_new ("Import Foobar2000 EQ Preset...", GTK_WINDOW (mainwin), GTK_FILE_CHOOSER_ACTION_OPEN, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_OPEN, GTK_RESPONSE_OK, NULL); + + GtkFileFilter* flt; + flt = gtk_file_filter_new (); + gtk_file_filter_set_name (flt, "Foobar2000 EQ presets (*.feq)"); + gtk_file_filter_add_pattern (flt, "*.feq"); + gtk_file_chooser_add_filter (GTK_FILE_CHOOSER (dlg), flt); + + gtk_file_chooser_set_select_multiple (GTK_FILE_CHOOSER (dlg), FALSE); + // restore folder + gtk_file_chooser_set_current_folder_uri (GTK_FILE_CHOOSER (dlg), deadbeef->conf_get_str ("filechooser.lastdir", "")); + int response = gtk_dialog_run (GTK_DIALOG (dlg)); + // store folder + gchar *folder = gtk_file_chooser_get_current_folder_uri (GTK_FILE_CHOOSER (dlg)); + if (folder) { + deadbeef->conf_set_str ("filechooser.lastdir", folder); + g_free (folder); + } + if (response == GTK_RESPONSE_OK) + { + gchar *fname = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (dlg)); + if (fname) { + FILE *fp = fopen (fname, "rt"); + if (fp) { + int vals[18]; // integer dBs + int i = 0; + while (i < 18) { + char tmp[20]; + char *out = fgets (tmp, sizeof (tmp), fp); + if (!out) { + break; + } + vals[i] = atoi (tmp); + i++; + } + fclose (fp); + if (i == 18) { + // apply and save config + DB_supereq_dsp_t *eq = get_supereq_plugin (); + if (eq) { + eq->set_preamp (1); + ddb_equalizer_set_preamp (DDB_EQUALIZER (eqwin), 0); + for (int i = 0; i < 18; i++) { + ddb_equalizer_set_band (DDB_EQUALIZER (eqwin), i, vals[i]); + eq->set_band (i, db_to_amp (vals[i])); + } + gdk_window_invalidate_rect (eqwin->window, NULL, FALSE); + deadbeef->conf_save (); + } + } + else { + fprintf (stderr, "[eq] corrupted Foobar2000 preset file, discarded\n"); + } + } + g_free (fname); + } + } + gtk_widget_destroy (dlg); } void @@ -120,6 +299,20 @@ eq_window_show (void) { G_CALLBACK (on_zero_all_clicked), NULL); + button = gtk_button_new_with_label ("Zero Preamp"); + gtk_widget_show (button); + gtk_box_pack_start (GTK_BOX (buttons), button, FALSE, FALSE, 0); + g_signal_connect ((gpointer) button, "clicked", + G_CALLBACK (on_zero_preamp_clicked), + NULL); + + button = gtk_button_new_with_label ("Zero Bands"); + gtk_widget_show (button); + gtk_box_pack_start (GTK_BOX (buttons), button, FALSE, FALSE, 0); + g_signal_connect ((gpointer) button, "clicked", + G_CALLBACK (on_zero_bands_clicked), + NULL); + button = gtk_button_new_with_label ("Save Preset"); gtk_widget_show (button); gtk_box_pack_start (GTK_BOX (buttons), button, FALSE, FALSE, 0); @@ -134,6 +327,13 @@ eq_window_show (void) { G_CALLBACK (on_load_preset_clicked), NULL); + button = gtk_button_new_with_label ("Import Foobar2000 Preset"); + gtk_widget_show (button); + gtk_box_pack_start (GTK_BOX (buttons), button, FALSE, FALSE, 0); + g_signal_connect ((gpointer) button, "clicked", + G_CALLBACK (on_import_fb2k_preset_clicked), + NULL); + eqwin = GTK_WIDGET (ddb_equalizer_new()); g_signal_connect (eqwin, "on_changed", G_CALLBACK (eq_value_changed), 0); gtk_widget_set_size_request (eqwin, -1, 200); |