changeset 904:5d26b869a48e dev-0_8_94

Add resampling configuration.
author Matti Hamalainen <ccr@tnsp.org>
date Fri, 09 Nov 2012 09:48:12 +0200
parents cd9f482f063f
children 545965719e67
files src/xs_config.c src/xs_config.h src/xs_interface.c src/xs_sidplayfp.cpp xmms-sid.glade
diffstat 5 files changed, 64 insertions(+), 84 deletions(-) [+]
line wrap: on
line diff
--- a/src/xs_config.c	Fri Nov 09 09:31:25 2012 +0200
+++ b/src/xs_config.c	Fri Nov 09 09:48:12 2012 +0200
@@ -109,6 +109,8 @@
 { CTYPE_INT,    &xs_cfg.sid2OptLevel,           "sid2OptLevel" },
 { CTYPE_INT,    &xs_cfg.sid2NFilterPresets,     "sid2NFilterPresets" },
 
+{ CTYPE_INT,    &xs_cfg.residSampling,          "residSampling" },
+
 { CTYPE_BOOL,   &xs_cfg.playMaxTimeEnable,      "playMaxTimeEnable" },
 { CTYPE_BOOL,   &xs_cfg.playMaxTimeUnknown,     "playMaxTimeUnknown" },
 { CTYPE_INT,    &xs_cfg.playMaxTime,            "playMaxTime" },
@@ -166,7 +168,10 @@
 { WTYPE_BGROUP, CTYPE_INT,      "cfg_emu_sp2_resid",    &xs_cfg.sid2Builder,            XS_BLD_RESID },
 { WTYPE_BGROUP, CTYPE_INT,      "cfg_emu_sp2_hardsid",  &xs_cfg.sid2Builder,            XS_BLD_HARDSID },
 
-{ WTYPE_TEXT,   CTYPE_STR,      "cfg_rom_path",         &xs_cfg.romPath,                0 },
+{ WTYPE_BGROUP, CTYPE_INT,      "cfg_emu_resid_interpolate", &xs_cfg.residSampling,     XS_RESID_INTERPOLATE },
+{ WTYPE_BGROUP, CTYPE_INT,      "cfg_emu_resid_resample_fir", &xs_cfg.residSampling,    XS_RESID_RESAMPLE_FIR },
+
+{ WTYPE_TEXT,   CTYPE_STR,      "cfg_emu_rom_path",     &xs_cfg.romPath,                0 },
 
 { WTYPE_BUTTON, CTYPE_BOOL,     "cfg_emu_filters",      &xs_cfg.emulateFilters,         0 },
 { WTYPE_SCALE,  CTYPE_FLOAT,    "cfg_sp1_filter_fs",    &xs_cfg.sid1Filter.fs,          0 },
@@ -185,6 +190,7 @@
 { WTYPE_TEXT,   CTYPE_STR,      "cfg_stil_dbpath",      &xs_cfg.stilDBPath,             0 },
 { WTYPE_TEXT,   CTYPE_STR,      "cfg_hvsc_path",        &xs_cfg.hvscPath,               0 },
 
+
 #ifndef AUDACIOUS_PLUGIN
 { WTYPE_BGROUP, CTYPE_INT,      "cfg_subctrl_none",     &xs_cfg.subsongControl,         XS_SSC_NONE },
 { WTYPE_BGROUP, CTYPE_INT,      "cfg_subctrl_seek",     &xs_cfg.subsongControl,         XS_SSC_SEEK },
@@ -1151,7 +1157,7 @@
     xs_rom_selector = create_xs_rom_fs();
     XS_MUTEX_LOCK(xs_cfg);
     gtk_file_selection_set_filename(GTK_FILE_SELECTION(xs_rom_selector),
-        gtk_entry_get_text(GTK_ENTRY(LUW("cfg_rom_path"))));
+        gtk_entry_get_text(GTK_ENTRY(LUW("cfg_emu_rom_path"))));
     XS_MUTEX_UNLOCK(xs_cfg);
     gtk_widget_show(xs_rom_selector);
 }
@@ -1172,7 +1178,7 @@
     else
         path = result;
 
-    gtk_entry_set_text(GTK_ENTRY(LUW("cfg_rom_path")), path);
+    gtk_entry_set_text(GTK_ENTRY(LUW("cfg_emu_rom_path")), path);
 
     /* Close file selector window */
     gtk_widget_destroy(xs_rom_selector);
@@ -1453,8 +1459,10 @@
 
 #ifdef HAVE_RESID_BUILDER
     gtk_widget_set_sensitive(LUW("cfg_emu_sp2_resid"), isEither);
+    gtk_widget_set_sensitive(LUW("cfg_resid_frame"), isFPActive);
 #else
     gtk_widget_set_sensitive(LUW("cfg_emu_sp2_resid"), FALSE);
+    gtk_widget_set_sensitive(LUW("cfg_resid_frame"), FALSE);
 #endif
 
 #ifdef HAVE_HARDSID_BUILDER
@@ -1462,6 +1470,7 @@
 #else
     gtk_widget_set_sensitive(LUW("cfg_emu_sp2_hardsid"), FALSE);
 #endif
+
 }
 
 
@@ -1626,7 +1635,6 @@
     gtk_widget_set_sensitive(LUW("cfg_box_filter_sidplay2"), FALSE);
 #endif
 
-    gtk_widget_set_sensitive(LUW("cfg_resid_frame"), FALSE);
 
 #if !defined(HAVE_SONG_POSITION) && !defined(AUDACIOUS_PLUGIN)
     gtk_widget_set_sensitive(LUW("cfg_subctrl_patch"), FALSE);
--- a/src/xs_config.h	Fri Nov 09 09:31:25 2012 +0200
+++ b/src/xs_config.h	Fri Nov 09 09:48:12 2012 +0200
@@ -26,6 +26,14 @@
     XS_BLD_RESID_FP
 };
 
+
+enum XS_RESID
+{
+    XS_RESID_INTERPOLATE = 1,
+    XS_RESID_RESAMPLE_FIR,
+};
+
+
 enum XS_RESOLUTION
 {
     XS_RES_8BIT = 8,
@@ -126,6 +134,7 @@
     xs_sid_filter_t    sid2Filter;  /* Current SIDPlay2 filter */
     xs_sid_filter_t    **sid2FilterPresets;
     gint        sid2NFilterPresets;
+    gint        residSampling;
     
     
     /* Playing settings */
--- a/src/xs_interface.c	Fri Nov 09 09:31:25 2012 +0200
+++ b/src/xs_interface.c	Fri Nov 09 09:48:12 2012 +0200
@@ -83,14 +83,12 @@
   GtkWidget *cfg_resid_frame;
   GtkWidget *w_vbox37;
   GSList *samplingtype_group = NULL;
-  GtkWidget *cfg_emu_resid_fast;
-  GtkWidget *cfg_emu_resid_int;
-  GtkWidget *cfg_emu_resid_res_fast;
-  GtkWidget *cfg_emu_resid_res_int;
+  GtkWidget *cfg_emu_resid_interpolate;
+  GtkWidget *cfg_emu_resid_resample_fir;
   GtkWidget *cfg_rom_frame;
   GtkWidget *w_rom_hbox;
   GtkWidget *cfg_rom_label1;
-  GtkWidget *cfg_rom_path;
+  GtkWidget *cfg_emu_rom_path;
   GtkWidget *cfg_rom_browse;
   GtkWidget *w_label48;
   GtkWidget *w_vbox25;
@@ -679,43 +677,25 @@
   gtk_container_add (GTK_CONTAINER (cfg_resid_frame), w_vbox37);
   gtk_container_set_border_width (GTK_CONTAINER (w_vbox37), 2);
 
-  cfg_emu_resid_fast = gtk_radio_button_new_with_label (samplingtype_group, _("Fast (nearest neighbour)"));
-  samplingtype_group = gtk_radio_button_group (GTK_RADIO_BUTTON (cfg_emu_resid_fast));
-  gtk_widget_set_name (cfg_emu_resid_fast, "cfg_emu_resid_fast");
-  gtk_widget_ref (cfg_emu_resid_fast);
-  gtk_object_set_data_full (GTK_OBJECT (xs_configwin), "cfg_emu_resid_fast", cfg_emu_resid_fast,
-                            (GtkDestroyNotify) gtk_widget_unref);
-  gtk_widget_show (cfg_emu_resid_fast);
-  gtk_box_pack_start (GTK_BOX (w_vbox37), cfg_emu_resid_fast, FALSE, FALSE, 0);
-  gtk_tooltips_set_tip (tooltips, cfg_emu_resid_fast, _("Fastest and also worst sounding sampling method, simply picks nearest neighbouring sample."), NULL);
-
-  cfg_emu_resid_int = gtk_radio_button_new_with_label (samplingtype_group, _("Linear interpolation"));
-  samplingtype_group = gtk_radio_button_group (GTK_RADIO_BUTTON (cfg_emu_resid_int));
-  gtk_widget_set_name (cfg_emu_resid_int, "cfg_emu_resid_int");
-  gtk_widget_ref (cfg_emu_resid_int);
-  gtk_object_set_data_full (GTK_OBJECT (xs_configwin), "cfg_emu_resid_int", cfg_emu_resid_int,
+  cfg_emu_resid_interpolate = gtk_radio_button_new_with_label (samplingtype_group, _("Linear interpolation"));
+  samplingtype_group = gtk_radio_button_group (GTK_RADIO_BUTTON (cfg_emu_resid_interpolate));
+  gtk_widget_set_name (cfg_emu_resid_interpolate, "cfg_emu_resid_interpolate");
+  gtk_widget_ref (cfg_emu_resid_interpolate);
+  gtk_object_set_data_full (GTK_OBJECT (xs_configwin), "cfg_emu_resid_interpolate", cfg_emu_resid_interpolate,
                             (GtkDestroyNotify) gtk_widget_unref);
-  gtk_widget_show (cfg_emu_resid_int);
-  gtk_box_pack_start (GTK_BOX (w_vbox37), cfg_emu_resid_int, FALSE, FALSE, 0);
-  gtk_tooltips_set_tip (tooltips, cfg_emu_resid_int, _("Uses linear interpolation between samples, yielding higher audio quality with less sampling noise."), NULL);
+  gtk_widget_show (cfg_emu_resid_interpolate);
+  gtk_box_pack_start (GTK_BOX (w_vbox37), cfg_emu_resid_interpolate, FALSE, FALSE, 0);
+  gtk_tooltips_set_tip (tooltips, cfg_emu_resid_interpolate, _("Uses linear interpolation between samples, yielding higher audio quality with less sampling noise."), NULL);
 
-  cfg_emu_resid_res_fast = gtk_radio_button_new_with_label (samplingtype_group, _("Resampling"));
-  samplingtype_group = gtk_radio_button_group (GTK_RADIO_BUTTON (cfg_emu_resid_res_fast));
-  gtk_widget_set_name (cfg_emu_resid_res_fast, "cfg_emu_resid_res_fast");
-  gtk_widget_ref (cfg_emu_resid_res_fast);
-  gtk_object_set_data_full (GTK_OBJECT (xs_configwin), "cfg_emu_resid_res_fast", cfg_emu_resid_res_fast,
+  cfg_emu_resid_resample_fir = gtk_radio_button_new_with_label (samplingtype_group, _("Resampling (FIR)"));
+  samplingtype_group = gtk_radio_button_group (GTK_RADIO_BUTTON (cfg_emu_resid_resample_fir));
+  gtk_widget_set_name (cfg_emu_resid_resample_fir, "cfg_emu_resid_resample_fir");
+  gtk_widget_ref (cfg_emu_resid_resample_fir);
+  gtk_object_set_data_full (GTK_OBJECT (xs_configwin), "cfg_emu_resid_resample_fir", cfg_emu_resid_resample_fir,
                             (GtkDestroyNotify) gtk_widget_unref);
-  gtk_widget_show (cfg_emu_resid_res_fast);
-  gtk_box_pack_start (GTK_BOX (w_vbox37), cfg_emu_resid_res_fast, FALSE, FALSE, 0);
-
-  cfg_emu_resid_res_int = gtk_radio_button_new_with_label (samplingtype_group, _("Resampling (FIR)"));
-  samplingtype_group = gtk_radio_button_group (GTK_RADIO_BUTTON (cfg_emu_resid_res_int));
-  gtk_widget_set_name (cfg_emu_resid_res_int, "cfg_emu_resid_res_int");
-  gtk_widget_ref (cfg_emu_resid_res_int);
-  gtk_object_set_data_full (GTK_OBJECT (xs_configwin), "cfg_emu_resid_res_int", cfg_emu_resid_res_int,
-                            (GtkDestroyNotify) gtk_widget_unref);
-  gtk_widget_show (cfg_emu_resid_res_int);
-  gtk_box_pack_start (GTK_BOX (w_vbox37), cfg_emu_resid_res_int, FALSE, FALSE, 0);
+  gtk_widget_show (cfg_emu_resid_resample_fir);
+  gtk_box_pack_start (GTK_BOX (w_vbox37), cfg_emu_resid_resample_fir, FALSE, FALSE, 0);
+  gtk_tooltips_set_tip (tooltips, cfg_emu_resid_resample_fir, _("High quality resampling with a FIR filter. CPU intensive."), NULL);
 
   cfg_rom_frame = gtk_frame_new (_("C64 Kernal/Basic/Chargen ROMs:"));
   gtk_widget_set_name (cfg_rom_frame, "cfg_rom_frame");
@@ -743,13 +723,13 @@
   gtk_widget_show (cfg_rom_label1);
   gtk_box_pack_start (GTK_BOX (w_rom_hbox), cfg_rom_label1, FALSE, FALSE, 0);
 
-  cfg_rom_path = gtk_entry_new ();
-  gtk_widget_set_name (cfg_rom_path, "cfg_rom_path");
-  gtk_widget_ref (cfg_rom_path);
-  gtk_object_set_data_full (GTK_OBJECT (xs_configwin), "cfg_rom_path", cfg_rom_path,
+  cfg_emu_rom_path = gtk_entry_new ();
+  gtk_widget_set_name (cfg_emu_rom_path, "cfg_emu_rom_path");
+  gtk_widget_ref (cfg_emu_rom_path);
+  gtk_object_set_data_full (GTK_OBJECT (xs_configwin), "cfg_emu_rom_path", cfg_emu_rom_path,
                             (GtkDestroyNotify) gtk_widget_unref);
-  gtk_widget_show (cfg_rom_path);
-  gtk_box_pack_start (GTK_BOX (w_rom_hbox), cfg_rom_path, TRUE, TRUE, 0);
+  gtk_widget_show (cfg_emu_rom_path);
+  gtk_box_pack_start (GTK_BOX (w_rom_hbox), cfg_emu_rom_path, TRUE, TRUE, 0);
 
   cfg_rom_browse = gtk_button_new_with_label (_("Browse"));
   gtk_widget_set_name (cfg_rom_browse, "cfg_rom_browse");
--- a/src/xs_sidplayfp.cpp	Fri Nov 09 09:31:25 2012 +0200
+++ b/src/xs_sidplayfp.cpp	Fri Nov 09 09:48:12 2012 +0200
@@ -155,9 +155,22 @@
     /* Audio parameters sanity checking and setup */
     state->audioBitsPerSample = XS_RES_16BIT;
     state->audioFormat = FMT_S16_NE;
-    engine->config.samplingMethod = SID2_RESAMPLE_INTERPOLATE;
     engine->config.frequency = state->audioFrequency;
 
+    switch (xs_cfg.residSampling)
+    {
+        case XS_RESID_RESAMPLE_FIR:
+            engine->config.samplingMethod = SID2_RESAMPLE_INTERPOLATE;
+            break;
+
+        case XS_RESID_INTERPOLATE:
+        default:
+            xs_cfg.residSampling = XS_RESID_INTERPOLATE;
+            engine->config.samplingMethod = SID2_INTERPOLATE;
+            break;
+    }
+
+
     /* Clockspeed settings */
     switch (xs_cfg.clockSpeed)
     {
--- a/xmms-sid.glade	Fri Nov 09 09:31:25 2012 +0200
+++ b/xmms-sid.glade	Fri Nov 09 09:48:12 2012 +0200
@@ -744,23 +744,7 @@
 
 	    <widget>
 	      <class>GtkRadioButton</class>
-	      <name>cfg_emu_resid_fast</name>
-	      <tooltip>Fastest and also worst sounding sampling method, simply picks nearest neighbouring sample.</tooltip>
-	      <can_focus>True</can_focus>
-	      <label>Fast (nearest neighbour)</label>
-	      <active>False</active>
-	      <draw_indicator>True</draw_indicator>
-	      <group>samplingtype</group>
-	      <child>
-		<padding>0</padding>
-		<expand>False</expand>
-		<fill>False</fill>
-	      </child>
-	    </widget>
-
-	    <widget>
-	      <class>GtkRadioButton</class>
-	      <name>cfg_emu_resid_int</name>
+	      <name>cfg_emu_resid_interpolate</name>
 	      <tooltip>Uses linear interpolation between samples, yielding higher audio quality with less sampling noise.</tooltip>
 	      <can_focus>True</can_focus>
 	      <label>Linear interpolation</label>
@@ -776,22 +760,8 @@
 
 	    <widget>
 	      <class>GtkRadioButton</class>
-	      <name>cfg_emu_resid_res_fast</name>
-	      <can_focus>True</can_focus>
-	      <label>Resampling</label>
-	      <active>False</active>
-	      <draw_indicator>True</draw_indicator>
-	      <group>samplingtype</group>
-	      <child>
-		<padding>0</padding>
-		<expand>False</expand>
-		<fill>False</fill>
-	      </child>
-	    </widget>
-
-	    <widget>
-	      <class>GtkRadioButton</class>
-	      <name>cfg_emu_resid_res_int</name>
+	      <name>cfg_emu_resid_resample_fir</name>
+	      <tooltip>High quality resampling with a FIR filter. CPU intensive.</tooltip>
 	      <can_focus>True</can_focus>
 	      <label>Resampling (FIR)</label>
 	      <active>False</active>
@@ -845,7 +815,7 @@
 
 	    <widget>
 	      <class>GtkEntry</class>
-	      <name>cfg_rom_path</name>
+	      <name>cfg_emu_rom_path</name>
 	      <can_focus>True</can_focus>
 	      <editable>True</editable>
 	      <text_visible>True</text_visible>