home *** CD-ROM | disk | FTP | other *** search
/ Audio Version 4.94 / audioversion4.94knowledgemediaresourcelibraryoctober1994.iso / amiga / utils / gmdmmacr.lha / drumnum.dmcs < prev    next >
Text File  |  1993-11-20  |  8KB  |  227 lines

  1. /* DrumNum.dmcs                                                         */
  2. /* By Keith Barkley, November 1993                                      */
  3.  
  4. /* Set up number/name array.  Names from GM document off of the internet. */
  5. /* Change it if you want to. */
  6. name.       = "NULL"
  7. name.35    = "ACOUSTIC BASS DRUM"   ;  name.36            = "BASS DRUM 1"  
  8. name.37            = "SIDE STICK"   ;  name.38         = "ACOUSTIC SNARE" 
  9. name.39              = "HANDCLAP"   ;  name.40         = "ELECTRIC SNARE"  
  10. name.41         = "LOW FLOOR TOM"   ;  name.42          = "CLOSED HI HAT" 
  11. name.43        = "HIGH FLOOR TOM"   ;  name.44           = "PEDAL HI HAT"  
  12. name.45               = "LOW TOM"   ;  name.46            = "OPEN HI HAT" 
  13. name.47           = "LOW MID TOM"   ;  name.48             = "HI MID TOM" 
  14. name.49        = "CRASH CYMBAL 1"   ;  name.50               = "HIGH TOM" 
  15. name.51         = "RIDE CYMBAL 1"   ;  name.52         = "CHINESE CYMBAL" 
  16. name.53             = "RIDE BELL"   ;  name.54             = "TAMBOURINE" 
  17. name.55         = "SPLASH CYMBAL"   ;  name.56                = "COWBELL" 
  18. name.57        = "CRASH CYMBAL 2"   ;  name.58              = "VIBRASLAP" 
  19. name.59         = "RIDE CYMBAL 2"   ;  name.60               = "HI BONGO" 
  20. name.61             = "LOW BONGO"   ;  name.62          = "MUTE HI CONGA"  
  21. name.63         = "OPEN HI CONGA"   ;  name.64              = "LOW CONGA" 
  22. name.65          = "HIGH TIMBALE"   ;  name.66            = "LOW TIMBALE"  
  23. name.67            = "HIGH AGOGO"   ;  name.68              = "LOW AGOGO" 
  24. name.69                = "CABASA"   ;  name.70                = "MARACAS" 
  25. name.71         = "SHORT WHISTLE"   ;  name.72           = "LONG WHISTLE"  
  26. name.73           = "SHORT GUIRO"   ;  name.74             = "LONG GUIRO" 
  27. name.75                = "CLAVES"   ;  name.76          = "HI WOOD BLOCK"  
  28. name.77        = "LOW WOOD BLOCK"   ;  name.78              = "MUTECUICA" 
  29. name.79            = "OPEN CUICA"   ;  name.80          = "MUTE TRIANGLE" 
  30. name.81         = "OPEN TRIANGLE" 
  31.  
  32. /* These names are defined for my Roland Dr. Synth            */
  33. name.27                = "HIGH Q"   ;  name.28                   = "SLAP" 
  34. name.31                = "STICKS"   ;  name.32           = "SQUARE CLICK"  
  35.  
  36. name.82                = "SHAKER"   ;  name.83           = "JINGLE BELLS" 
  37. name.85             = "CASTANETS"   ;  name.86             = "MUTE SURDO" 
  38. name.87            = "OPEN SURDO"   
  39.  
  40. /* if you add new names remember to change these variables... */
  41.  
  42. lownote = 27     /* 35 for GM */  
  43. highnote = 87    /* 81 for GM */
  44.  
  45. clipname = "GMOldDrumNote"
  46.  
  47. T = 'TITLE "GM Drum Request"'
  48.  
  49. oldnote = GETCLIP(clipname)
  50. if oldnote = "" THEN oldnote = 35
  51.  
  52. /* Get name or help request */
  53. OPTIONS RESULTS
  54. P = ' PROMPT "Type in the name of the drum or click HELP."'
  55. D = ' DEFAULT "' || name.oldnote || '"'
  56. B = ' BUTTONS "_OK|_Help"'
  57.  
  58. RequestString T || P || D || B 
  59.  
  60. IF ( RC = 5 ) THEN CALL GET_HELP 
  61.  
  62. /* user thought they knew the name of the drum */
  63.  
  64. note = 0
  65. searchname = UPPER(COMPRESS(RESULT))
  66. DO i = lownote TO highnote
  67.     IF (searchname = COMPRESS(name.i) ) THEN DO
  68.         note = i
  69.         LEAVE i
  70.     END  /* end if */
  71. END
  72. IF (note ~= 0) THEN CALL INSERT_IT note
  73.  
  74. OPTIONS RESULTS
  75. P = ' PROMPT "Could not find ' || searchname || '!"'
  76. B = ' BUTTONS "_Quit|_Help" '
  77.  
  78. RequestResponse T || P || B 
  79.     
  80. IF (RESULT = 1) THEN CALL GET_HELP
  81. EXIT 0
  82.  
  83. /**********************************************************/
  84. /* This functions allows the user to select a list or a search */
  85.  
  86. GET_HELP:
  87. /* Ask for list or search */
  88. OPTIONS RESULTS
  89. P = ' PROMPT "Would you like a List or a Search?"'
  90. B = ' BUTTONS "_List|_Search"'
  91.  
  92. RequestResponse  T || P || B
  93.  
  94. IF (RESULT = 0) THEN CALL GO_LIST 
  95.                 ELSE CALL GO_SEARCH
  96. EXIT 0
  97.  
  98. /************************************************************/
  99. /*  This function is used to list all the instruments from lownote    */
  100. /*  to highnote and allows the user to just click the mouse to       */
  101. /*  select the desired instrument.                                  */
  102.  
  103. GO_LIST:
  104. /* list some number of items in patch order.  provide a number to make */
  105. /* it easy to select..*/
  106.  
  107. maxlen = 79 /* Length of line available in requester */
  108. n = lownote - 1   /* the number of the note we want */
  109. i = 0  /* the index */
  110. string = ""
  111. lnote = 0
  112. request = 0  /* Do we need a request ? */
  113.  
  114. DO UNTIL (n= highnote)
  115.  
  116.     DO UNTIL (name.n ~= "NULL" ) /* In case there are gaps in the list */
  117.         n = n + 1  /* Always done at least once */
  118.     END 
  119.     
  120.     i = i + 1
  121.  
  122.     /* Build String of form " 1-name1; 2-name2" */
  123.     build = ";" || i || "-" || name.n
  124.     numlist.i = n
  125.     
  126.     IF (LENGTH(string)+LENGTH(build)) > maxlen THEN DO
  127.         request = 1
  128.         n = n-1  /* roll back n */
  129.         i = i - 1 /* i = last index */
  130.     END
  131.     ELSE string = string || build
  132.     
  133.     IF (n = highnote) THEN request = 1  /* If we have reached the end */
  134.     
  135.     IF (request = 1) THEN DO
  136.         string = DELSTR(string, 1, 1)  /* Remove the first semicolon */
  137.         
  138.         OPTIONS RESULTS
  139.         
  140.         ttl = ' TITLE "Click # of desired drum."'
  141.         string = ' PROMPT "' || string || '"'
  142.         b = ""
  143.         
  144.         DO bi = 1 TO i  /* build list of button numbers */
  145.             b = b || bi || '|'
  146.         END
  147.         
  148.         b = ' BUTTONS "' || b || '_None"'
  149.         
  150.         RequestResponse ttl || string || b
  151.         
  152.         r = RESULT + 1   /* because it returns the buttons starting at '0'*/
  153.         IF ( r = i+1) THEN DO
  154.             /* set up for next loop */
  155.             string = ""
  156.             i = 0
  157.             request = 0
  158.             /* Note :: Do nothing with n .. we didn't use it yet...*/
  159.             
  160.             ITERATE
  161.         END /* End of ( r = i+1)  IF */
  162.         
  163.         /* Found it ! */
  164.         lnote = numlist.r
  165.         LEAVE
  166.         
  167.     END /* end of request if */
  168.     
  169. END /* Until n = highnote do */
  170.  
  171. CALL Insert_It lnote
  172. EXIT 0
  173.  
  174. /*****************************************************/
  175. /*  This function allows the abuser to enter either a letter or      */
  176. /*  a word to search for.  A letter returns all the insruments that  */
  177. /*  start with that letter.  A word matches all instances of that    */
  178. /*  sequence of characters.                                          */
  179.  
  180. GO_SEARCH:
  181. /* Get search string */
  182. /* If single character then get all names that start with letter. */
  183. /* If multiple characters use index function to find all occurances */
  184.  
  185. OPTIONS RESULTS
  186.  
  187. P = ' PROMPT "Enter a character or a word" '
  188. D = ' DEFAULT "" '
  189. B = ' BUTTONS "_OK" '
  190.  
  191. RequestString T || P || D || B
  192.               
  193. searchstr = UPPER(COMPRESS(RESULT))
  194. len = LENGTH(searchstr)
  195.  
  196. DO i = lownote TO highnote
  197.     ind = INDEX(COMPRESS(name.i) , searchstr)
  198.     IF (ind = 0) THEN ITERATE i              /* str not found */
  199.     IF (len = 1) & (ind > 1 ) THEN ITERATE i /* single letter not 1st */
  200.      /* String Matches ! */
  201.     OPTIONS RESULTS
  202.     
  203.     P = ' PROMPT "Is ' || name.i || ' correct?"'
  204.     B = ' BUTTONS "_OK|_Next|_Quit" '
  205.  
  206.     RequestResponse T || P || B
  207.     IF (RESULT = 0) THEN CALL INSERT_IT i
  208.     IF (RESULT = 2) THEN CALL INSERT_IT 0
  209. END
  210.  
  211. EXIT 0  /* End of function */
  212.  
  213. /*  This is where all the functions come in order to insert the  */
  214. /*  GM instrument note number.  It also updates the clip list.   */
  215.  
  216. INSERT_IT:
  217. /* if notenum is invalid, return, if not then insert note and leave...*/
  218. PARSE ARG notenum
  219.  
  220. IF ((notenum < lownote ) | (notenum > highnote) ) THEN EXIT 0
  221.  
  222. CALL SETCLIP clipname,notenum
  223. InsertItem "NOTE PITCH "|| notenum
  224. Next "CHORD"
  225.  
  226. EXIT 0
  227.