📄 plugin.c
字号:
channelcnt = DMODE_STEREO; md_mode |= DMODE_STEREO; } if ((mikmod_cfg.interpolation == 1)) { md_mode |= DMODE_INTERP; } md_pansep = mikmod_cfg.def_pansep; #if (LIBMIKMOD_VERSION > 0x30106) MikMod_Init("");#else MikMod_Init();#endif if (!(mf = Player_Load(filename, cfg_maxchn, mikmod_cfg.hidden_patterns))) { mikmod_ip.set_info_text(_("Couldn't load mod")); mikmod_going = 0; return; } mf->extspd = cfg_extspd; mf->panflag = cfg_panning; mf->wrap = cfg_wrap; mf->loop = cfg_loop; mf->fadeout = mikmod_cfg.volumefadeout; Player_Start(mf); if (mf->volume > uservolume) Player_SetVolume(uservolume);/* mods are in pattrens .. you need to be able to seek back the forth from pattrens */ mikmod_ip.set_info(mf->songname, -1, ((mf->bpm * 1000)), md_mixfreq, channelcnt); pthread_create(&decode_thread, NULL, play_loop, NULL); return;}static void *play_loop(void *arg){ while (mikmod_going) { if (Player_Active()) drv_xmms.Update(); else { xmms_usleep(10000); } } Player_Stop(); /* stop playing */ Player_Free(mf); /* and free the module */ mikmod_going = 0; MikMod_Exit(); pthread_exit(NULL);}static void configure(){ GtkWidget *notebook1, *vbox, *vbox1, *hbox1, *Resolution_Frame, *vbox4; GSList *resolution_group = NULL, *vbox5_group = NULL; GtkWidget *Channels_Frame, *vbox5, *Downsample_Frame, *vbox3; GSList *sample_group = NULL; GtkWidget *vbox6, *Quality_Label, *Options_Label; GtkWidget *pansep_label, *pansep_hscale; GtkWidget *bbox, *ok, *cancel; if (!mikmod_conf_window) { mikmod_conf_window = gtk_window_new(GTK_WINDOW_DIALOG); gtk_object_set_data(GTK_OBJECT(mikmod_conf_window), "mikmod_conf_window", mikmod_conf_window); gtk_window_set_title(GTK_WINDOW(mikmod_conf_window), _("MikMod Configuration")); gtk_window_set_policy(GTK_WINDOW(mikmod_conf_window), FALSE, FALSE, FALSE); gtk_window_set_position(GTK_WINDOW(mikmod_conf_window), GTK_WIN_POS_MOUSE); gtk_signal_connect(GTK_OBJECT(mikmod_conf_window), "destroy", GTK_SIGNAL_FUNC(gtk_widget_destroyed), &mikmod_conf_window); gtk_container_border_width(GTK_CONTAINER(mikmod_conf_window), 10); vbox = gtk_vbox_new(FALSE, 10); gtk_container_add(GTK_CONTAINER(mikmod_conf_window), vbox); notebook1 = gtk_notebook_new(); gtk_object_set_data(GTK_OBJECT(mikmod_conf_window), "notebook1", notebook1); gtk_widget_show(notebook1); gtk_box_pack_start(GTK_BOX(vbox), notebook1, TRUE, TRUE, 0); gtk_container_border_width(GTK_CONTAINER(notebook1), 3); vbox1 = gtk_vbox_new(FALSE, 0); gtk_object_set_data(GTK_OBJECT(mikmod_conf_window), "vbox1", vbox1); gtk_widget_show(vbox1); hbox1 = gtk_hbox_new(FALSE, 0); gtk_object_set_data(GTK_OBJECT(mikmod_conf_window), "hbox1", hbox1); gtk_widget_show(hbox1); gtk_box_pack_start(GTK_BOX(vbox1), hbox1, TRUE, TRUE, 0); Resolution_Frame = gtk_frame_new(_("Resolution:")); gtk_object_set_data(GTK_OBJECT(mikmod_conf_window), "Resolution_Frame", Resolution_Frame); gtk_widget_show(Resolution_Frame); gtk_box_pack_start(GTK_BOX(hbox1), Resolution_Frame, TRUE, TRUE, 0); gtk_container_set_border_width(GTK_CONTAINER(Resolution_Frame), 5); vbox4 = gtk_vbox_new(FALSE, 0); gtk_object_set_data(GTK_OBJECT(mikmod_conf_window), "vbox4", vbox4); gtk_widget_show(vbox4); gtk_container_add(GTK_CONTAINER(Resolution_Frame), vbox4); Res_16 = gtk_radio_button_new_with_label(resolution_group, _("16 bit")); resolution_group = gtk_radio_button_group(GTK_RADIO_BUTTON(Res_16)); gtk_object_set_data(GTK_OBJECT(mikmod_conf_window), "Res_16", Res_16); gtk_widget_show(Res_16); gtk_box_pack_start(GTK_BOX(vbox4), Res_16, TRUE, TRUE, 0); if (mikmod_cfg.force8bit == 0) gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(Res_16), TRUE); Res_8 = gtk_radio_button_new_with_label(resolution_group, _("8 bit")); resolution_group = gtk_radio_button_group(GTK_RADIO_BUTTON(Res_8)); gtk_object_set_data(GTK_OBJECT(mikmod_conf_window), "Res_8", Res_8); gtk_widget_show(Res_8); gtk_box_pack_start(GTK_BOX(vbox4), Res_8, TRUE, TRUE, 0); if (mikmod_cfg.force8bit == 1) gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(Res_8), TRUE); Channels_Frame = gtk_frame_new(_("Channels:")); gtk_object_set_data(GTK_OBJECT(mikmod_conf_window), "Channels_Frame", Channels_Frame); gtk_widget_show(Channels_Frame); gtk_box_pack_start(GTK_BOX(hbox1), Channels_Frame, TRUE, TRUE, 0); gtk_container_set_border_width(GTK_CONTAINER(Channels_Frame), 5); vbox5 = gtk_vbox_new(FALSE, 0); gtk_object_set_data(GTK_OBJECT(mikmod_conf_window), "vbox5", vbox5); gtk_widget_show(vbox5); gtk_container_add(GTK_CONTAINER(Channels_Frame), vbox5); Chan_ST = gtk_radio_button_new_with_label(vbox5_group, _("Stereo")); vbox5_group = gtk_radio_button_group(GTK_RADIO_BUTTON(Chan_ST)); gtk_object_set_data(GTK_OBJECT(mikmod_conf_window), "Chan_ST", Chan_ST); gtk_widget_show(Chan_ST); gtk_box_pack_start(GTK_BOX(vbox5), Chan_ST, TRUE, TRUE, 0); if (mikmod_cfg.force_mono == 0) gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(Chan_ST), TRUE); Chan_MO = gtk_radio_button_new_with_label(vbox5_group, _("Mono")); vbox5_group = gtk_radio_button_group(GTK_RADIO_BUTTON(Chan_MO)); gtk_object_set_data(GTK_OBJECT(mikmod_conf_window), "Chan_MO", Chan_MO); gtk_widget_show(Chan_MO); gtk_box_pack_start(GTK_BOX(vbox5), Chan_MO, TRUE, TRUE, 0); if (mikmod_cfg.force_mono == 1) gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(Chan_MO), TRUE); Downsample_Frame = gtk_frame_new(_("Downsample:")); gtk_object_set_data(GTK_OBJECT(mikmod_conf_window), "Downsample_Frame", Downsample_Frame); gtk_widget_show(Downsample_Frame); gtk_box_pack_start(GTK_BOX(vbox1), Downsample_Frame, TRUE, TRUE, 0); gtk_container_set_border_width(GTK_CONTAINER(Downsample_Frame), 5); vbox3 = gtk_vbox_new(FALSE, 0); gtk_object_set_data(GTK_OBJECT(mikmod_conf_window), "vbox3", vbox3); gtk_widget_show(vbox3); gtk_container_add(GTK_CONTAINER(Downsample_Frame), vbox3); Sample_44 = gtk_radio_button_new_with_label(sample_group, _("1:1 (44 kHz)")); sample_group = gtk_radio_button_group(GTK_RADIO_BUTTON(Sample_44)); gtk_object_set_data(GTK_OBJECT(mikmod_conf_window), "Sample_44", Sample_44); gtk_widget_show(Sample_44); gtk_box_pack_start(GTK_BOX(vbox3), Sample_44, TRUE, TRUE, 0); if (mikmod_cfg.mixing_freq == SAMPLE_FREQ_44) gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(Sample_44), TRUE); Sample_22 = gtk_radio_button_new_with_label(sample_group, _("1:2 (22 kHz)")); sample_group = gtk_radio_button_group(GTK_RADIO_BUTTON(Sample_22)); gtk_object_set_data(GTK_OBJECT(mikmod_conf_window), "Sample_22", Sample_22); gtk_widget_show(Sample_22); gtk_box_pack_start(GTK_BOX(vbox3), Sample_22, TRUE, TRUE, 0); if (mikmod_cfg.mixing_freq == SAMPLE_FREQ_22) gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(Sample_22), TRUE); Sample_11 = gtk_radio_button_new_with_label(sample_group, _("1:4 (11 kHz)")); sample_group = gtk_radio_button_group(GTK_RADIO_BUTTON(Sample_11)); gtk_object_set_data(GTK_OBJECT(mikmod_conf_window), "Sample_11", Sample_11); gtk_widget_show(Sample_11); gtk_box_pack_start(GTK_BOX(vbox3), Sample_11, TRUE, TRUE, 0); if (mikmod_cfg.mixing_freq == SAMPLE_FREQ_11) gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(Sample_11), TRUE); vbox6 = gtk_vbox_new(FALSE, 0); gtk_object_set_data(GTK_OBJECT(mikmod_conf_window), "vbox6", vbox6); gtk_widget_show(vbox6); Curious_Check = gtk_check_button_new_with_label(_("Look for hidden patterns in modules ")); gtk_object_set_data(GTK_OBJECT(mikmod_conf_window), "Curious_Check", Curious_Check); gtk_widget_show(Curious_Check); gtk_box_pack_start(GTK_BOX(vbox6), Curious_Check, TRUE, TRUE, 0); if (mikmod_cfg.hidden_patterns == 1) gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(Curious_Check), TRUE); Surrond_Check = gtk_check_button_new_with_label(_("Use surround mixing")); gtk_object_set_data(GTK_OBJECT(mikmod_conf_window), "Surround_Check", Surrond_Check); gtk_widget_show(Surrond_Check); gtk_box_pack_start(GTK_BOX(vbox6), Surrond_Check, TRUE, TRUE, 0); if (mikmod_cfg.surround == 1) gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(Surrond_Check), TRUE); Fadeout_Check = gtk_check_button_new_with_label(_("Force volume fade at the end of the module")); gtk_object_set_data(GTK_OBJECT(mikmod_conf_window), "Fadeout_Check", Fadeout_Check); gtk_widget_show(Fadeout_Check); gtk_box_pack_start(GTK_BOX(vbox6), Fadeout_Check, TRUE, TRUE, 0); if (mikmod_cfg.volumefadeout == 1) gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(Fadeout_Check), TRUE); Interp_Check = gtk_check_button_new_with_label(_("Use interpolation")); gtk_object_set_data(GTK_OBJECT(mikmod_conf_window), "Interp_Check", Interp_Check); gtk_widget_show(Interp_Check); gtk_box_pack_start(GTK_BOX(vbox6), Interp_Check, TRUE, TRUE, 0); if (mikmod_cfg.interpolation == 1) gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(Interp_Check), TRUE); pansep_label = gtk_label_new(_("Default panning separation")); gtk_widget_show(pansep_label); gtk_box_pack_start(GTK_BOX(vbox6), pansep_label, TRUE, TRUE, 0); pansep_adj = gtk_adjustment_new(mikmod_cfg.def_pansep, 0.0, 129.0, 1.0, 8.0, 1.0); pansep_hscale = gtk_hscale_new(GTK_ADJUSTMENT(pansep_adj)); gtk_scale_set_digits(GTK_SCALE(pansep_hscale), 0); gtk_scale_set_draw_value(GTK_SCALE(pansep_hscale), TRUE); gtk_scale_set_value_pos(GTK_SCALE(pansep_hscale), GTK_POS_BOTTOM); gtk_widget_show(pansep_hscale); gtk_box_pack_start(GTK_BOX(vbox6), pansep_hscale, TRUE, TRUE, 0); Quality_Label = gtk_label_new(_("Quality")); gtk_object_set_data(GTK_OBJECT(mikmod_conf_window), "Quality_Label", Quality_Label); gtk_widget_show(Quality_Label); gtk_notebook_append_page(GTK_NOTEBOOK(notebook1), vbox1, Quality_Label); Options_Label = gtk_label_new(_("Options")); gtk_object_set_data(GTK_OBJECT(mikmod_conf_window), "Options_Label", Options_Label); gtk_widget_show(Options_Label); gtk_notebook_append_page(GTK_NOTEBOOK(notebook1), vbox6, Options_Label); bbox = gtk_hbutton_box_new(); gtk_button_box_set_layout(GTK_BUTTON_BOX(bbox), GTK_BUTTONBOX_END); gtk_button_box_set_spacing(GTK_BUTTON_BOX(bbox), 5); gtk_box_pack_start(GTK_BOX(vbox), bbox, FALSE, FALSE, 0); ok = gtk_button_new_with_label(_("Ok")); gtk_signal_connect(GTK_OBJECT(ok), "clicked", GTK_SIGNAL_FUNC(config_ok), NULL); GTK_WIDGET_SET_FLAGS(ok, GTK_CAN_DEFAULT); gtk_box_pack_start(GTK_BOX(bbox), ok, TRUE, TRUE, 0); gtk_widget_show(ok); gtk_widget_grab_default(ok); cancel = gtk_button_new_with_label(_("Cancel")); gtk_signal_connect_object(GTK_OBJECT(cancel), "clicked", GTK_SIGNAL_FUNC(gtk_widget_destroy), GTK_OBJECT(mikmod_conf_window)); GTK_WIDGET_SET_FLAGS(cancel, GTK_CAN_DEFAULT); gtk_box_pack_start(GTK_BOX(bbox), cancel, TRUE, TRUE, 0); gtk_widget_show(cancel); gtk_widget_show(bbox); gtk_widget_show(vbox); gtk_widget_show(mikmod_conf_window); } else { gdk_window_raise(mikmod_conf_window->window); }}static void config_ok(GtkWidget * widget, gpointer data){ ConfigFile *cfg; gchar *filename; if (GTK_TOGGLE_BUTTON(Res_8)->active) mikmod_cfg.force8bit = 1; else mikmod_cfg.force8bit = 0; if (GTK_TOGGLE_BUTTON(Chan_MO)->active) mikmod_cfg.force_mono = 1; else mikmod_cfg.force_mono = 0; if (GTK_TOGGLE_BUTTON(Sample_22)->active) mikmod_cfg.mixing_freq = SAMPLE_FREQ_22; else if (GTK_TOGGLE_BUTTON(Sample_11)->active) mikmod_cfg.mixing_freq = SAMPLE_FREQ_11; else mikmod_cfg.mixing_freq = SAMPLE_FREQ_44; mikmod_cfg.hidden_patterns = GTK_TOGGLE_BUTTON(Curious_Check)->active; mikmod_cfg.surround = GTK_TOGGLE_BUTTON(Surrond_Check)->active; mikmod_cfg.volumefadeout = GTK_TOGGLE_BUTTON(Fadeout_Check)->active; mikmod_cfg.interpolation = GTK_TOGGLE_BUTTON(Interp_Check)->active; mikmod_cfg.def_pansep = (guchar)GTK_ADJUSTMENT(pansep_adj)->value; md_pansep = mikmod_cfg.def_pansep; filename = g_strconcat(g_get_home_dir(), "/.xmms/config", NULL); cfg = xmms_cfg_open_file(filename); if (!cfg) cfg = xmms_cfg_new(); xmms_cfg_write_int(cfg, "MIKMOD", "mixing_freq", mikmod_cfg.mixing_freq); xmms_cfg_write_int(cfg, "MIKMOD", "volumefadeout", mikmod_cfg.volumefadeout); xmms_cfg_write_int(cfg, "MIKMOD", "surround", mikmod_cfg.surround); xmms_cfg_write_int(cfg, "MIKMOD", "force8bit", mikmod_cfg.force8bit); xmms_cfg_write_int(cfg, "MIKMOD", "hidden_patterns", mikmod_cfg.hidden_patterns); xmms_cfg_write_int(cfg, "MIKMOD", "force_mono", mikmod_cfg.force_mono); xmms_cfg_write_int(cfg, "MIKMOD", "interpolation", mikmod_cfg.interpolation); xmms_cfg_write_int(cfg, "MIKMOD", "panning_separation", mikmod_cfg.def_pansep); xmms_cfg_write_file(cfg, filename); xmms_cfg_free(cfg); g_free(filename); gtk_widget_destroy(mikmod_conf_window);}InputPlugin mikmod_ip ={ NULL, NULL, NULL, /* Description */ init, aboutbox, configure, is_our_file, NULL, play_file, stop, mod_pause, seek, NULL, get_time, NULL, NULL, NULL, NULL, NULL, NULL, NULL, get_song_info, NULL, /* file_info_box */ NULL};
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -