summaryrefslogtreecommitdiff
path: root/plugins
diff options
context:
space:
mode:
authorGravatar Alexey Yakovenko <wakeroid@gmail.com>2010-04-07 21:20:43 +0200
committerGravatar Alexey Yakovenko <wakeroid@gmail.com>2010-04-07 21:20:43 +0200
commitdecdfd59ce2bf0427b8bfa8d6e6e79415f552e43 (patch)
tree273be81b4896c64990eec1fc77bf7f281f8524f6 /plugins
parent018dac7318c89c0751744f026166318d078f4b8d (diff)
eq preset management
Diffstat (limited to 'plugins')
-rw-r--r--plugins/gtkui/callbacks.c18
-rw-r--r--plugins/gtkui/eq.c200
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);