diff -ur gt-0.4/utils/unsf.c gt-0.4.new/utils/unsf.c --- gt-0.4/utils/unsf.c 2004-11-07 22:41:05.000000000 +0100 +++ gt-0.4.new/utils/unsf.c 2008-01-27 19:55:30.000000000 +0100 @@ -100,6 +100,11 @@ unsigned char other_patches[128]; } VelocityRangeList; +/* allow the user to choose which velocity to write the first (as the first + one gets used by apps which do not know about the extended patch format) */ +static signed char melody_velocity_override[128][128]; +static signed char drum_velocity_override[128][128]; + static int opt_8bit = FALSE; static int opt_verbose = FALSE; static int opt_veryverbose = FALSE; @@ -2980,6 +2988,8 @@ width = vlist->velmax[k] - vlist->velmin[k]; } } + if (melody_velocity_override[i][j] != -1) + widest = melody_velocity_override[i][j]; if (widest) { velmin = vlist->velmin[0]; velmax = vlist->velmax[0]; @@ -3020,6 +3030,8 @@ width = vlist->velmax[k] - vlist->velmin[k]; } } + if (drum_velocity_override[i][j] != -1) + widest = drum_velocity_override[i][j]; if (widest) { velmin = vlist->velmin[0]; velmax = vlist->velmax[0]; @@ -3663,8 +3675,12 @@ int i, c; char cfgname[80]; char *inname; + char *sep1, *sep2; + + memset(melody_velocity_override, -1, 128*128); + memset(drum_velocity_override, -1, 128*128); - while ((c = getopt (argc, argv, "FVvnsdm")) > 0) + while ((c = getopt (argc, argv, "FVvnsdmM:D:")) > 0) switch (c) { case 'v': opt_verbose = 1; @@ -3687,13 +3703,35 @@ case 'V': opt_adjust_volume = 0; break; + case 'M': + sep1 = strchr(optarg, ':'); + sep2 = strchr(optarg, '='); + if (sep1 && sep2) + { + melody_velocity_override[atoi(optarg)] + [atoi(sep1 + 1)] = atoi(sep2 + 1); + break; + } + /* error fall through, check will fail again */ + case 'D': + sep1 = strchr(optarg, ':'); + sep2 = strchr(optarg, '='); + if (sep1 && sep2) + { + drum_velocity_override[atoi(optarg)] + [atoi(sep1 + 1)] = atoi(sep2 + 1); + break; + } + /* error fall through */ default: - fprintf(stderr, "usage: unsf [-v] [-n] [-s] [-d] [-m] [-F] [-V] filename\n"); + fprintf(stderr, "usage: unsf [-v] [-n] [-s] [-d] [-m] [-F] [-V] [-M :=]\n" + " [-D :=] \n"); return 1; } if (argc - optind != 1) { - fprintf(stderr, "usage: unsf [-v] [-n] [-s] [-d] [-m] [-F] [-V] filename\n"); + fprintf(stderr, "usage: unsf [-v] [-n] [-s] [-d] [-m] [-F] [-V] [-M :=]\n" + " [-D :=] \n"); exit(1); } diff -ur gt-0.4/utils/unsf.man gt-0.4.new/utils/unsf.man --- gt-0.4/utils/unsf.man 2004-11-07 23:20:37.000000000 +0100 +++ gt-0.4.new/utils/unsf.man 2008-01-27 20:03:06.000000000 +0100 @@ -6,7 +6,8 @@ .SH SYNOPSIS -.B unsf [-v|-s|-m|-d|-n|-V] \fBsoundfont-file\fR +.B unsf +[\fI-v|-s|-m|-d|-n|-V\fR] [\fI-M :=\fR] [\fI-D :=\fR] \fBsoundfont-file\fR .SH DESCRIPTION @@ -135,6 +136,15 @@ .TP .B \-v Verbose. +.TP +.B \-M \fI:=\fR +Make the given velocity \fIlayer\fR the default for \fIbank:instrument\fR, +this affects programs which do not know howto handle the extended GUS patch +format, as they will always play the default layer, and this determines which +layer gets written when using \fB-s\fR. +.TP +.B \-D \fI:=\fR +Same as \fB-M\fR but then for drum banks. .SH AUTHORS