# HG changeset patch # User Matti Hamalainen # Date 1352447292 -7200 # Node ID 5d26b869a48eaa60be6c18a6d8cb9373ea7d223f # Parent cd9f482f063f8b7683b67f1b161399e06b07c6e3 Add resampling configuration. diff -r cd9f482f063f -r 5d26b869a48e src/xs_config.c --- 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); diff -r cd9f482f063f -r 5d26b869a48e src/xs_config.h --- 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 */ diff -r cd9f482f063f -r 5d26b869a48e src/xs_interface.c --- 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"); diff -r cd9f482f063f -r 5d26b869a48e src/xs_sidplayfp.cpp --- 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) { diff -r cd9f482f063f -r 5d26b869a48e xmms-sid.glade --- 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 @@ GtkRadioButton - cfg_emu_resid_fast - Fastest and also worst sounding sampling method, simply picks nearest neighbouring sample. - True - - False - True - samplingtype - - 0 - False - False - - - - - GtkRadioButton - cfg_emu_resid_int + cfg_emu_resid_interpolate Uses linear interpolation between samples, yielding higher audio quality with less sampling noise. True @@ -776,22 +760,8 @@ GtkRadioButton - cfg_emu_resid_res_fast - True - - False - True - samplingtype - - 0 - False - False - - - - - GtkRadioButton - cfg_emu_resid_res_int + cfg_emu_resid_resample_fir + High quality resampling with a FIR filter. CPU intensive. True False @@ -845,7 +815,7 @@ GtkEntry - cfg_rom_path + cfg_emu_rom_path True True True