home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Audio Version 4.94
/
audioversion4.94knowledgemediaresourcelibraryoctober1994.iso
/
amiga
/
utils
/
gmdmmacr.lha
/
patchnum.dmcs
< prev
Wrap
Text File
|
1993-11-04
|
11KB
|
312 lines
/* Arexx macro to insert the preset number for a given GM instrument */
/* by Keith Barkley 10/93 */
/* Set up number/name array. Names from GM document off of the internet. */
/* Well, some names are from my Dr Synth... 8^) */
/* Change it if you want to. */
namef = 0 /* Because I don't know how to pass arrays... */
groupf = 1
group. = "NULL"
name. = "NULL"
group.1 = "PIANO" ;
name.1 = "GRAND PIANO" ; name.2 = "BRIGHT PIANO"
name.3 = "ELECTRIC GRAND PIANO" ; name.4 = "HONKY-TONK PIANO"
name.5 = "ELECTRIC PIANO 1" ; name.6 = "ELECTRIC PIANO 2"
name.7 = "HARPSICHORD" ; name.8 = "CLAVICHORD"
group.2 = "CHROMATIC PERCUSSION" ;
name.9 = "CELESTA" ; name.10 = "GLOCKENSPIEL"
name.11 = "MUSIC BOX" ; name.12 = "VIBRAPHONE"
name.13 = "MARIMBA" ; name.14 = "XYLOPHONE"
name.15 = "TUBULAR BELLS" ; name.16 = "DULCIMER"
group.3 = "ORGAN" ;
name.17 = "DRAWBAR ORGAN" ; name.18 = "PERCUSSIVE ORGAN"
name.19 = "ROCK ORGAN" ; name.20 = "CHURCH ORGAN"
name.21 = "REED ORGAN" ; name.22 = "ACCORDION"
name.23 = "HARMONICA" ; name.24 = "BANDONEON"
group.4 = "GUITAR" ;
name.25 = "NYLON STR GUITAR" ; name.26 = "STEEL STR GUITAR"
name.27 = "JAZZ GUITAR" ; name.28 = "CLEAN GUITAR"
name.29 = "MUTED GUITAR" ; name.30 = "OVERDRIVEN GUITAR"
name.31 = "DISTORTION GUITAR" ; name.32 = "GUITAR HARMONICS"
group.5 = "BASS" ;
name.33 = "ACOUSTIC BASS" ; name.34 = "FINGERED BASS"
name.35 = "PICKED BASS" ; name.36 = "FRETLESS BASS"
name.37 = "SLAP BASS 1" ; name.38 = "SLAP BASS 2"
name.39 = "SYNTH BASS 1" ; name.40 = "SYNTH BASS 2"
group.6 = "STRINGS"
name.41 = "VIOLIN" ; name.42 = "VIOLA"
name.43 = "CELLO" ; name.44 = "CONTRABASS"
name.45 = "TREMOLO STRINGS" ; name.46 = "PIZZICATO STRINGS"
name.47 = "HARP" ; name.48 = "TIMPANI"
group.7 = "ENSEMBLE"
name.49 = "STRINGS" ; name.50 = "SLOW STRINGS"
name.51 = "SYNTH STRINGS 1" ; name.52 = "SYNTH STRINGS 2"
name.53 = "CHOIR AAHS" ; name.54 = "VOICE OOHS"
name.55 = "SYNTH VOICE" ; name.56 = "ORCHESTRA HIT"
group.8 = "BRASS"
name.57 = "TRUMPET" ; name.58 = "TROMBONE"
name.59 = "TUBA" ; name.60 = "MUTED TRUMPET"
name.61 = "FRENCH HORN" ; name.62 = "BRASS 1"
name.63 = "SYNTH BRASS 1" ; name.64 = "SYNTH BRASS 2"
group.9 = "REED"
name.65 = "SOPRANO SAX" ; name.66 = "ALTO SAX"
name.67 = "TENOR SAX" ; name.68 = "BARITONE SAX"
name.69 = "OBOE" ; name.70 = "ENGLISH HORN"
name.71 = "BASSOON" ; name.72 = "CLARINET"
group.10 = "PIPE"
name.73 = "PICCOLO" ; name.74 = "FLUTE"
name.75 = "RECORDER" ; name.76 = "PAN FLUTE"
name.77 = "BLOWN BOTTLE" ; name.78 = "SHAKUHACHI"
name.79 = "WHISTLE" ; name.80 = "OCARINA"
group.11 = "SYNTH LEAD"
name.81 = "SQUARE WAVE" ; name.82 = "SAWTOOTH WAVE"
name.83 = "SYNTH CALLIOPE" ; name.84 = "CHIFFER"
name.85 = "CHARANG" ; name.86 = "SOLO VOX"
name.87 = "FIFTH SAW WAVE" ; name.88 = "BASS AND LEAD"
group.12 = "SYNTH PAD"
name.89 = "FANTASIA" ; name.90 = "WARM"
name.91 = "POLYSYNTH" ; name.92 = "SPACE VOICE"
name.93 = "BOWED GLASS" ; name.94 = "METAL"
name.95 = "HALO" ; name.96 = "SWEEP"
group.13 = "SYNTH EFFECTS"
name.97 = "ICE RAIN" ; name.98 = "SOUNDTRACK"
name.99 = "CRYSTAL" ; name.100 = "ATMOSPHERE"
name.101 = "BRIGHTNESS" ; name.102 = "GOBLIN"
name.103 = "ECHO DROPS" ; name.104 = "STAR THEME"
group.14 = "ETHNIC"
name.105 = "SITAR" ; name.106 = "BANJO"
name.107 = "SHAMISEN" ; name.108 = "KOTO"
name.109 = "KALIMBA" ; name.110 = "BAGPIPE"
name.111 = "FIDDLE" ; name.112 = "SHANAI"
group.15 = "PERCUSSIVE"
name.113 = "TINKLE BELL" ; name.114 = "AGOGO"
name.115 = "STEEL DRUMS" ; name.116 = "WOODBLOCK"
name.117 = "TAIKO" ; name.118 = "MELODIC TOM"
name.119 = "SYNTH DRUM" ; name.120 = "REVERSE CYMBAL"
group.16 = "SOUND EFFECTS"
name.121 = "GUITAR FRET NOISE" ; name.122 = "BREATH NOISE"
name.123 = "SEASHORE" ; name.124 = "BIRD TWEET"
name.125 = "TELEPHONE" ; name.126 = "HELICOPTER"
name.127 = "APPLAUSE" ; name.128 = "GUNSHOT"
T= ' TITLE "GM Instrument Request"'
/* Get name or help request */
OPTIONS RESULTS
P = ' PROMPT "Type in the name of the instrument or click HELP."'
D = ' DEFAULT "' || name.1 || '"'
B = ' BUTTONS "_OK|_Help"'
RequestString T || P || D || B
IF ( RC = 5 ) THEN CALL GET_HELP
/* user thought they knew the name of the drum */
searchname = UPPER(COMPRESS(RESULT))
patch = 0
DO i = 1 TO 128
IF (searchname = COMPRESS(name.i) ) THEN DO
patch = i
LEAVE i
END /* end if */
END
IF (patch ~= 0) THEN CALL SAY_IT patch
OPTIONS RESULTS
P = ' PROMPT "Could not find ' || searchname || '!"'
B = ' BUTTONS "_Quit|_Help" '
RequestResponse T || P || B
IF (RESULT = 1) THEN CALL GET_HELP
EXIT 0
/**********************************************************/
/* This functions allows the user to select a list or a search */
GET_HELP:
/* Ask for list or search */
OPTIONS RESULTS
P = ' PROMPT "Would you like a List, a Name Search or a Group Search?"'
B = ' BUTTONS "_List|_Name|_Group"'
RequestResponse T || P || B
res = RESULT
SELECT ;
WHEN (res = 0) THEN CALL GO_LIST namef, 1, 128
WHEN (res = 1) THEN CALL GO_SEARCH
WHEN (res = 2) THEN CALL GROUP_SEARCH
END
CALL SAY_IT RESULT
EXIT 0
/************************************************************/
/* This function is used to list a set of instruments or groups */
/* from 1 to 128 and allows the user to just click the mouse to */
/* select the desired instrument. */
GO_LIST:
ARG var, low, high
/* list some number of items in patch order. provide a number to make */
/* it easy to select..*/
maxlen = 79 /* Length of line available in requester */
n = low - 1 /* the number of the note we want */
i = 0 /* the index */
string = ""
lpatch = 0
request = 0 /* Do we need a request ? */
DO UNTIL (n=high)
DO UNTIL (var.n ~= "NULL" ) /* In case there are gaps in the list */
n = n + 1 /* Always done at least once */
END
i = i + 1
/* Build String of form " 1-name1; 2-name2" */
IF (var = namef) THEN build = ";" || i || "-" || name.n
ELSE build = ";" || i || "-" || group.n
numlist.i = n
IF (LENGTH(string)+LENGTH(build)) > maxlen THEN DO
request = 1
n = n-1 /* roll back n */
i = i - 1 /* i = last index */
END
ELSE string = string || build
IF (n = high ) THEN request = 1
IF (request = 1) THEN DO
string = DELSTR(string, 1, 1) /* Remove the first semicolon */
OPTIONS RESULTS
ttl = ' TITLE "Click # of desired item."'
string = ' PROMPT "' || string || '"'
b = ""
DO bi = 1 TO i /* build list of button numbers */
b = b || bi || '|'
END
b = ' BUTTONS "' || b || '_None"'
RequestResponse ttl || string || b
r = RESULT + 1 /* because it returns the buttons starting at '0'*/
IF ( r = i+1) THEN DO
/* set up for next loop */
string = ""
i = 0
request = 0
/* Note :: Do nothing with n .. we didn't use it yet...*/
ITERATE
END /* End of ( r = i+1) IF */
/* Found it ! */
lpatch = numlist.r
LEAVE
END /* end of request if */
END /* Until n = high do */
RETURN lpatch /* none found !*/
/*****************************************************/
/* This function allows the abuser to enter either a letter or */
/* a word to search for. A letter returns all the insruments that */
/* start with that letter. A word matches all instances of that */
/* sequence of characters. */
GO_SEARCH:
/* Get search string */
/* If single character then get all names that start with letter. */
/* If multiple characters use index function to find all occurances */
OPTIONS RESULTS
P = ' PROMPT "Enter a character or a word" '
D = ' DEFAULT "" '
B = ' BUTTONS "_OK" '
RequestString T || P || D || B
searchstr = UPPER(COMPRESS(RESULT))
len = LENGTH(searchstr)
DO i = 1 TO 128
ind = INDEX(COMPRESS(name.i) , searchstr)
IF (ind = 0) THEN ITERATE i /* str not found */
IF (len = 1) & (ind > 1 ) THEN ITERATE i /* single letter not 1st */
/* String Matches ! */
OPTIONS RESULTS
P = ' PROMPT "Is ' || name.i || ' correct?"'
B = ' BUTTONS "_OK|_Next|_Quit" '
RequestResponse T || P || B
IF (RESULT = 0) THEN RETURN i
IF (RESULT = 2) THEN RETURN 0
END
EXIT 0 /* End of function */
/* This allows you to list the groups, select it and then list */
/* the instruments within that group. */
GROUP_SEARCH:
/* First get the group number... */
CALL GO_LIST groupf,1,16
CALL GO_LIST namef, (8 * RESULT - 7), (8*RESULT)
CALL SAY_IT RESULT
EXIT 0
/* This is where all the functions come in order to insert the */
/* GM instrument preset note number. */
SAY_IT:
ARG spatchnum
IF ((spatchnum = 0) | (spatchnum > 128) ) THEN EXIT 0
p = 'PROMPT "The preset for '||name.spatchnum||' is '||spatchnum
RequestNotify T || p
EXIT 0