home *** CD-ROM | disk | FTP | other *** search
/ Audio Version 4.94 / audioversion4.94knowledgemediaresourcelibraryoctober1994.iso / amiga / utils / gmdmmacr.lha / patchnum.dmcs < prev   
Text File  |  1993-11-04  |  11KB  |  312 lines

  1. /* Arexx macro to insert the preset number for a given GM instrument */
  2. /* by Keith Barkley   10/93 */
  3.  
  4. /* Set up number/name array.  Names from GM document off of the internet. */
  5. /* Well, some names are from my Dr Synth... 8^)                         */
  6. /* Change it if you want to. */
  7.  
  8. namef = 0  /* Because I don't know how to pass arrays... */
  9. groupf = 1
  10.  
  11. group.      = "NULL"
  12. name.       = "NULL"
  13.  
  14. group.1                = "PIANO"   ;
  15. name.1           = "GRAND PIANO"   ;  name.2           = "BRIGHT PIANO"  
  16. name.3  = "ELECTRIC GRAND PIANO"   ;  name.4       = "HONKY-TONK PIANO" 
  17. name.5      = "ELECTRIC PIANO 1"   ;  name.6       = "ELECTRIC PIANO 2"  
  18. name.7           = "HARPSICHORD"   ;  name.8             = "CLAVICHORD"
  19.  
  20. group.2  = "CHROMATIC PERCUSSION"  ; 
  21. name.9               = "CELESTA"   ;  name.10          = "GLOCKENSPIEL"  
  22. name.11            = "MUSIC BOX"   ;  name.12            = "VIBRAPHONE" 
  23. name.13              = "MARIMBA"   ;  name.14             = "XYLOPHONE" 
  24. name.15        = "TUBULAR BELLS"   ;  name.16              = "DULCIMER"
  25.  
  26. group.3                = "ORGAN"   ;  
  27. name.17        = "DRAWBAR ORGAN"   ;  name.18      = "PERCUSSIVE ORGAN" 
  28. name.19           = "ROCK ORGAN"   ;  name.20          = "CHURCH ORGAN" 
  29. name.21           = "REED ORGAN"   ;  name.22             = "ACCORDION" 
  30. name.23            = "HARMONICA"   ;  name.24             = "BANDONEON"
  31.  
  32. group.4               = "GUITAR"   ;
  33. name.25     = "NYLON STR GUITAR"   ;  name.26     = "STEEL STR GUITAR" 
  34. name.27          = "JAZZ GUITAR"   ;  name.28         = "CLEAN GUITAR"  
  35. name.29         = "MUTED GUITAR"   ;  name.30    = "OVERDRIVEN GUITAR" 
  36. name.31    = "DISTORTION GUITAR"   ;  name.32     = "GUITAR HARMONICS" 
  37.  
  38. group.5                 = "BASS"   ; 
  39. name.33        = "ACOUSTIC BASS"   ;  name.34         = "FINGERED BASS" 
  40. name.35          = "PICKED BASS"   ;  name.36         = "FRETLESS BASS" 
  41. name.37          = "SLAP BASS 1"   ;  name.38           = "SLAP BASS 2"  
  42. name.39         = "SYNTH BASS 1"   ;  name.40          = "SYNTH BASS 2"
  43.  
  44. group.6              = "STRINGS" 
  45. name.41               = "VIOLIN"   ;  name.42                 = "VIOLA"  
  46. name.43                = "CELLO"   ;  name.44            = "CONTRABASS" 
  47. name.45      = "TREMOLO STRINGS"   ;  name.46     = "PIZZICATO STRINGS" 
  48. name.47                 = "HARP"   ;  name.48               = "TIMPANI"
  49.  
  50. group.7            = "ENSEMBLE"
  51. name.49              = "STRINGS"   ;  name.50          = "SLOW STRINGS" 
  52. name.51      = "SYNTH STRINGS 1"   ;  name.52       = "SYNTH STRINGS 2" 
  53. name.53           = "CHOIR AAHS"   ;  name.54            = "VOICE OOHS"
  54. name.55          = "SYNTH VOICE"   ;  name.56         = "ORCHESTRA HIT" 
  55.  
  56. group.8               = "BRASS"
  57. name.57              = "TRUMPET"   ;  name.58              = "TROMBONE"  
  58. name.59                 = "TUBA"   ;  name.60         = "MUTED TRUMPET" 
  59. name.61          = "FRENCH HORN"   ;  name.62               = "BRASS 1"
  60. name.63        = "SYNTH BRASS 1"   ;  name.64         = "SYNTH BRASS 2" 
  61.  
  62. group.9                = "REED"
  63. name.65          = "SOPRANO SAX"   ;  name.66              = "ALTO SAX" 
  64. name.67            = "TENOR SAX"   ;  name.68          = "BARITONE SAX"  
  65. name.69                 = "OBOE"   ;  name.70          = "ENGLISH HORN"
  66. name.71              = "BASSOON"   ;  name.72              = "CLARINET" 
  67.  
  68. group.10              = "PIPE" 
  69. name.73              = "PICCOLO"   ;  name.74                 = "FLUTE" 
  70. name.75             = "RECORDER"   ;  name.76             = "PAN FLUTE" 
  71. name.77         = "BLOWN BOTTLE"   ;  name.78            = "SHAKUHACHI"
  72. name.79              = "WHISTLE"   ;  name.80               = "OCARINA" 
  73.  
  74. group.11       =  "SYNTH LEAD"
  75. name.81          = "SQUARE WAVE"   ;  name.82         = "SAWTOOTH WAVE" 
  76. name.83       = "SYNTH CALLIOPE"   ;  name.84               = "CHIFFER"
  77. name.85              = "CHARANG"   ;  name.86              = "SOLO VOX" 
  78. name.87      =  "FIFTH SAW WAVE"   ;  name.88         = "BASS AND LEAD" 
  79.  
  80. group.12       = "SYNTH PAD" 
  81. name.89              = "FANTASIA"   ;  name.90                 = "WARM" 
  82. name.91             = "POLYSYNTH"   ;  name.92          = "SPACE VOICE" 
  83. name.93           = "BOWED GLASS"   ;  name.94                = "METAL" 
  84. name.95                  = "HALO"   ;  name.96                = "SWEEP" 
  85.  
  86. group.13      = "SYNTH EFFECTS"
  87. name.97              = "ICE RAIN"   ;  name.98           = "SOUNDTRACK"  
  88. name.99               = "CRYSTAL"   ;  name.100          = "ATMOSPHERE"
  89. name.101           = "BRIGHTNESS"   ;  name.102              = "GOBLIN"  
  90. name.103           = "ECHO DROPS"   ;  name.104          = "STAR THEME" 
  91.  
  92. group.14            = "ETHNIC"
  93. name.105                = "SITAR"   ;  name.106               = "BANJO" 
  94. name.107             = "SHAMISEN"   ;  name.108                = "KOTO"
  95. name.109              = "KALIMBA"   ;  name.110             = "BAGPIPE" 
  96. name.111               = "FIDDLE"   ;  name.112              = "SHANAI"
  97.  
  98. group.15       = "PERCUSSIVE" 
  99. name.113          = "TINKLE BELL"   ;  name.114              = "AGOGO"
  100. name.115          = "STEEL DRUMS"   ;  name.116          = "WOODBLOCK" 
  101. name.117                = "TAIKO"   ;  name.118        = "MELODIC TOM"  
  102. name.119           = "SYNTH DRUM"   ;  name.120     = "REVERSE CYMBAL" 
  103.  
  104. group.16    = "SOUND EFFECTS"
  105. name.121    = "GUITAR FRET NOISE"   ;  name.122       = "BREATH NOISE" 
  106. name.123             = "SEASHORE"   ;  name.124         = "BIRD TWEET" 
  107. name.125            = "TELEPHONE"   ;  name.126         = "HELICOPTER" 
  108. name.127             = "APPLAUSE"   ;  name.128            = "GUNSHOT"  
  109.  
  110.  
  111.  
  112.  
  113. T= ' TITLE "GM Instrument Request"'
  114.  
  115.  
  116. /* Get name or help request */
  117. OPTIONS RESULTS
  118. P = ' PROMPT "Type in the name of the instrument or click HELP."'
  119. D = ' DEFAULT "' || name.1 || '"'
  120. B = ' BUTTONS "_OK|_Help"'
  121.  
  122. RequestString T || P || D || B 
  123.  
  124. IF ( RC = 5 ) THEN CALL GET_HELP 
  125.  
  126. /* user thought they knew the name of the drum */
  127.  
  128. searchname = UPPER(COMPRESS(RESULT))
  129. patch = 0
  130. DO i = 1 TO 128
  131.     IF (searchname = COMPRESS(name.i) ) THEN DO
  132.         patch = i
  133.         LEAVE i
  134.     END  /* end if */
  135. END
  136. IF (patch  ~= 0) THEN CALL SAY_IT patch
  137.  
  138. OPTIONS RESULTS
  139. P = ' PROMPT "Could not find ' || searchname || '!"'
  140. B = ' BUTTONS "_Quit|_Help" '
  141.  
  142. RequestResponse T || P || B 
  143.     
  144. IF (RESULT = 1) THEN CALL GET_HELP
  145. EXIT 0
  146.  
  147. /**********************************************************/
  148. /* This functions allows the user to select a list or a search */
  149.  
  150. GET_HELP:
  151. /* Ask for list or search */
  152. OPTIONS RESULTS
  153. P = ' PROMPT "Would you like a List, a Name Search or a Group Search?"'
  154. B = ' BUTTONS "_List|_Name|_Group"'
  155.  
  156. RequestResponse  T || P || B
  157.  
  158. res = RESULT
  159.  
  160. SELECT ;
  161.     WHEN (res = 0) THEN CALL GO_LIST namef, 1, 128
  162.     WHEN (res = 1) THEN CALL GO_SEARCH 
  163.     WHEN (res = 2) THEN CALL GROUP_SEARCH 
  164. END    
  165.  
  166. CALL SAY_IT RESULT
  167.  
  168. EXIT 0
  169.  
  170. /************************************************************/
  171. /*  This function is used to list a set of instruments or groups       */
  172. /*  from 1 to 128 and allows the user to just click the mouse to      */
  173. /*  select the desired instrument.                                  */
  174.  
  175. GO_LIST:
  176. ARG var, low, high
  177. /* list some number of items in patch order.  provide a number to make */
  178. /* it easy to select..*/
  179.  
  180. maxlen = 79 /* Length of line available in requester */
  181. n = low - 1   /* the number of the note we want */
  182. i = 0  /* the index */
  183. string = ""
  184. lpatch = 0
  185. request = 0  /* Do we need a request ? */
  186.  
  187. DO UNTIL (n=high)
  188.  
  189.     DO UNTIL (var.n ~= "NULL" ) /* In case there are gaps in the list */
  190.         n = n + 1  /* Always done at least once */
  191.     END 
  192.     
  193.     i = i + 1
  194.  
  195.     /* Build String of form " 1-name1; 2-name2" */
  196.     IF (var = namef) THEN build = ";" || i || "-" || name.n
  197.                      ELSE build = ";" || i || "-" || group.n
  198.  
  199.     numlist.i = n
  200.     
  201.     IF (LENGTH(string)+LENGTH(build)) > maxlen THEN DO
  202.         request = 1
  203.         n = n-1  /* roll back n */
  204.         i = i - 1 /* i = last index */
  205.     END
  206.     ELSE string = string || build
  207.     
  208.     IF (n = high ) THEN request = 1
  209.     
  210.     IF (request = 1) THEN DO
  211.         string = DELSTR(string, 1, 1)  /* Remove the first semicolon */
  212.         
  213.         OPTIONS RESULTS
  214.         
  215.         ttl = ' TITLE "Click # of desired item."'
  216.         string = ' PROMPT "' || string || '"'
  217.         b = ""
  218.         
  219.         DO bi = 1 TO i  /* build list of button numbers */
  220.             b = b || bi || '|'
  221.         END
  222.         
  223.         b = ' BUTTONS "' || b || '_None"'
  224.         
  225.         RequestResponse ttl || string || b
  226.         
  227.         r = RESULT + 1   /* because it returns the buttons starting at '0'*/
  228.         IF ( r = i+1) THEN DO
  229.             /* set up for next loop */
  230.             string = ""
  231.             i = 0
  232.             request = 0
  233.             /* Note :: Do nothing with n .. we didn't use it yet...*/
  234.             
  235.             ITERATE
  236.         END /* End of ( r = i+1)  IF */
  237.         
  238.         /* Found it ! */
  239.         lpatch = numlist.r
  240.         LEAVE
  241.         
  242.     END /* end of request if */
  243.     
  244. END /* Until n = high do */
  245.  
  246. RETURN lpatch    /* none found !*/
  247.  
  248. /*****************************************************/
  249. /*  This function allows the abuser to enter either a letter or      */
  250. /*  a word to search for.  A letter returns all the insruments that  */
  251. /*  start with that letter.  A word matches all instances of that    */
  252. /*  sequence of characters.                                          */
  253.  
  254. GO_SEARCH:
  255. /* Get search string */
  256. /* If single character then get all names that start with letter. */
  257. /* If multiple characters use index function to find all occurances */
  258.  
  259. OPTIONS RESULTS
  260.  
  261. P = ' PROMPT "Enter a character or a word" '
  262. D = ' DEFAULT "" '
  263. B = ' BUTTONS "_OK" '
  264.  
  265. RequestString T || P || D || B
  266.               
  267. searchstr = UPPER(COMPRESS(RESULT))
  268. len = LENGTH(searchstr)
  269.  
  270. DO i = 1 TO 128
  271.     ind = INDEX(COMPRESS(name.i) , searchstr)
  272.     IF (ind = 0) THEN ITERATE i              /* str not found */
  273.     IF (len = 1) & (ind > 1 ) THEN ITERATE i /* single letter not 1st */
  274.      /* String Matches ! */
  275.     OPTIONS RESULTS
  276.     
  277.     P = ' PROMPT "Is ' || name.i || ' correct?"'
  278.     B = ' BUTTONS "_OK|_Next|_Quit" '
  279.  
  280.     RequestResponse T || P || B
  281.     IF (RESULT = 0) THEN RETURN    i
  282.     IF (RESULT = 2) THEN RETURN    0
  283. END
  284.  
  285. EXIT 0  /* End of function */
  286.  
  287.  
  288. /*  This allows you to list the groups, select it and then list  */
  289. /*  the instruments within that group.                           */
  290.  
  291. GROUP_SEARCH:
  292.  
  293. /* First get the group number... */
  294. CALL GO_LIST groupf,1,16
  295. CALL GO_LIST namef, (8 * RESULT - 7), (8*RESULT)
  296.  
  297. CALL SAY_IT  RESULT
  298.  
  299. EXIT 0
  300.  
  301. /*  This is where all the functions come in order to insert the  */
  302. /*  GM instrument preset note number.                            */
  303.  
  304. SAY_IT:
  305. ARG spatchnum
  306.  
  307. IF ((spatchnum = 0) | (spatchnum > 128) ) THEN EXIT 0
  308. p = 'PROMPT "The preset for '||name.spatchnum||' is '||spatchnum
  309. RequestNotify T || p
  310.  
  311. EXIT 0
  312.