📄 uif_sample.c
字号:
case 2: afmt.rate = 11025; break; default: /* custom rate */ widg = gtk_object_get_data (GTK_OBJECT (newsamwin), "ENcustom"); afmt.rate = atoi (gtk_entry_get_text (GTK_ENTRY (widg))); break; } /* fetch the bit width */ widg = gtk_object_get_data (GTK_OBJECT (newsamwin), "OPwidth"); UTIL_OPMENU_INDEX (i, widg); if (i != 1) afmt.width = 16; else afmt.width = 8; /* fetch the # of channels (mono/stereo) */ widg = gtk_object_get_data (GTK_OBJECT (newsamwin), "OPchan"); UTIL_OPMENU_INDEX (i, widg); if (i != 1) afmt.channels = 1; else afmt.channels = 2; /* fetch the endianness of the data (little/big) */ widg = gtk_object_get_data (GTK_OBJECT (newsamwin), "OPendian"); UTIL_OPMENU_INDEX (i, widg); afmt.lendian = (i == 0); /* fetch signed/unsigned selection */ widg = gtk_object_get_data (GTK_OBJECT (newsamwin), "OPsign"); UTIL_OPMENU_INDEX (i, widg); afmt.signd = (i == 0); fname = gtk_object_get_data (GTK_OBJECT (newsamwin), "fname"); if (!(afref = sam_open_file (fname, TRUE, &afmt))) return; if (!sam_check_file (afref)) { sam_close_file (afref); return; } } /* fetch the sample name from the dialog entry */ entry = gtk_object_get_data (GTK_OBJECT (newsamwin), "ENname"); samname = gtk_entry_get_text (GTK_ENTRY (entry)); if (!strlen (samname)) { /* must have something for sample name */ if (raw) sam_close_file (afref); util_quick_popup (_("Sample name is required"), NULL); return; } if (afref->info.channels == 2) stereo = TRUE; if (!stereo) { if (sfont_find_sample (uisf->sf, samname, NULL)) { if (raw) sam_close_file (afref); util_quick_popup (_("A sample already exists with that name"), NULL); return; } } else { /* stereo sample, compose each channels name */ s = smurfcfg_get_val (SMURFCFG_SAM_CH2_POSTFIX)->v_string; if (strlen (s) > 10) s = "_R"; if (strlen (samname) > 20 - strlen (s)) { s2 = g_strndup (samname, 20 - strlen (s)); osamname = g_strconcat (s2, s, NULL); g_free (s2); } else osamname = g_strconcat (samname, s, NULL); s = smurfcfg_get_val (SMURFCFG_SAM_CH1_POSTFIX)->v_string; if (strlen (s) > 10) s = "_L"; if (strlen (samname) > 20 - strlen (s)) { s2 = g_strndup (samname, 20 - strlen (s)); samname = g_strconcat (s2, s, NULL); g_free (s2); } else samname = g_strconcat (samname, s, NULL); /* check for name conflicts */ if (sfont_find_sample (uisf->sf, samname, NULL) || sfont_find_sample (uisf->sf, osamname, NULL)) { if (raw) sam_close_file (afref); g_free (samname); g_free (osamname); util_quick_popup ( _("Stereo sample name(s) conflict with existing sample"), NULL); return; } } if (!(sam = sam_load_file_as_sample (afref, uisf->sf))) { if (raw) sam_close_file (afref); if (stereo) { g_free (samname); g_free (osamname); } return; } sfont_set_namestr (uisf->sf, sam->name, samname); p = g_slist_find (uisf->sf->sample, sam); node = sftree_add_sample (p, uisf->nodes, SFTREE_NODE_APPEND); sfdo_group (_("New sample")); dofunc_noitem_save (SFTREE_NODE_REF (node)->itemid); if (stereo) { p = g_slist_next (p); sam = (SFSample *) (p->data); sfont_set_namestr (uisf->sf, sam->name, osamname); node = sftree_add_sample (g_slist_find (uisf->sf->sample, sam), uisf->nodes, SFTREE_NODE_APPEND); dofunc_noitem_save (SFTREE_NODE_REF (node)->itemid); g_free (samname); g_free (osamname); } sfdo_done (); gtk_widget_destroy (newsamwin);}voiduisam_export_sample (void){ SFItemID itemid; GtkCTreeNode *node; SFTreeRef *ref; GtkWidget *expwin; GtkWidget *box; GtkWidget *lbl; GtkWidget *opt; GtkWidget *menu; GtkWidget *item; GTokenValue *val; if (!(itemid = sftree_get_selection_single ())) return; if (!(node = SFTREE_LOOKUP_ITEMID (itemid))) return; if (util_activate_unique_dialog ("expsam", itemid)) return; expwin = gtk_file_selection_new (_("Export Sample")); util_register_unique_dialog (expwin, "expsam", itemid); /* if export path not set, use default sample path from smurf.cfg */ if (!uisam_sample_export_path) { val = smurfcfg_get_val (SMURFCFG_DEF_SAMPLE_PATH); uisam_sample_export_path = g_strdup (val->v_string); } if (strlen (uisam_sample_export_path)) gtk_file_selection_set_filename (GTK_FILE_SELECTION (expwin), uisam_sample_export_path); ref = SFTREE_NODE_REF (node); gtk_object_set_data (GTK_OBJECT (expwin), "itemid", GINT_TO_POINTER (itemid)); box = gtk_hbox_new (FALSE, 0); gtk_widget_show (box); gtk_box_pack_start (GTK_BOX (GTK_FILE_SELECTION (expwin)->main_vbox), box, FALSE, FALSE, 0); lbl = gtk_label_new (_("File Type:")); gtk_widget_show (lbl); gtk_box_pack_start (GTK_BOX (box), lbl, FALSE, FALSE, 2); opt = gtk_option_menu_new (); menu = gtk_menu_new (); /* "WAV" the audio file type */ item = gtk_menu_item_new_with_label (_("WAV")); gtk_object_set_data (GTK_OBJECT (item), "val", GINT_TO_POINTER (AUDIO_TYPE_WAV)); gtk_widget_show (item); gtk_menu_append (GTK_MENU (menu), item); /* "AIFF" the audio file type */ item = gtk_menu_item_new_with_label (_("AIFF")); gtk_object_set_data (GTK_OBJECT (item), "val", GINT_TO_POINTER (AUDIO_TYPE_AIFF)); gtk_widget_show (item); gtk_menu_append (GTK_MENU (menu), item); /* "AU" the audio file type */ item = gtk_menu_item_new_with_label (_("AU")); gtk_object_set_data (GTK_OBJECT (item), "val", GINT_TO_POINTER (AUDIO_TYPE_AU)); gtk_widget_show (item); gtk_menu_append (GTK_MENU (menu), item); gtk_option_menu_set_menu (GTK_OPTION_MENU (opt), menu); if (uisam_sample_export_type != -1) gtk_option_menu_set_history (GTK_OPTION_MENU (opt), uisam_sample_export_type); gtk_widget_show (opt); gtk_object_set_data (GTK_OBJECT (expwin), "filefmt", opt); gtk_box_pack_start (GTK_BOX (box), opt, FALSE, FALSE, 2); gtk_signal_connect_object (GTK_OBJECT (GTK_FILE_SELECTION (expwin)-> ok_button), "clicked", (GtkSignalFunc) uisam_cb_export_sample_ok, GTK_OBJECT (expwin)); gtk_signal_connect_object (GTK_OBJECT (GTK_FILE_SELECTION (expwin)-> cancel_button), "clicked", (GtkSignalFunc) gtk_widget_destroy, GTK_OBJECT (expwin)); gtk_widget_show (expwin);}static voiduisam_cb_export_sample_ok (GtkWidget * expwin){ SFItemID itemid; GtkCTreeNode *node; SFTreeRef *ref; UISFont *uisf; SFSample *sam; GtkWidget *opt; GtkWidget *menu; GtkWidget *actv; gint filetype, ndx; gchar *fname, *s; itemid = GPOINTER_TO_INT (gtk_object_get_data (GTK_OBJECT (expwin), "itemid")); if (!(node = SFTREE_LOOKUP_ITEMID (itemid))) return; uisf = SFTREE_UPFIND_UISF (node); ref = SFTREE_NODE_REF (node); sam = (SFSample *) (((GSList *) (ref->dptr))->data); opt = gtk_object_get_data (GTK_OBJECT (expwin), "filefmt"); menu = gtk_option_menu_get_menu (GTK_OPTION_MENU (opt)); actv = gtk_menu_get_active (GTK_MENU (menu)); filetype = GPOINTER_TO_INT (gtk_object_get_data (GTK_OBJECT (actv), "val")); ndx = g_list_index (GTK_MENU_SHELL (menu)->children, actv); fname = gtk_file_selection_get_filename (GTK_FILE_SELECTION (expwin)); if (!sam_export_sample (sam, uisf->sf, fname, filetype)) return; /* update sample export path */ g_free (uisam_sample_export_path); s = g_dirname (fname); uisam_sample_export_path = g_strconcat (s, "/", NULL); g_free (s); uisam_sample_export_type = ndx; gtk_widget_destroy (expwin);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -