⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 uif_sample.c

📁 A GTK sound font editor. Sound font files are used to synthesize instruments from audio samples for
💻 C
📖 第 1 页 / 共 2 页
字号:
	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 + -