home *** CD-ROM | disk | FTP | other *** search
/ GEMini Atari / GEMini_Atari_CD-ROM_Walnut_Creek_December_1993.iso / zip / music / pss480.lzh / YAMV_ED.LST < prev    next >
File List  |  1990-12-02  |  33KB  |  1,046 lines

  1. ' ************************************************************************
  2. ' *              YAMAHA PSS-480 VOICE AND STYLE CHANGER                  *
  3. ' *                                                                      *
  4. '                by Michael L.Silverstein (12/90)                        *
  5. ' *                                                                      *
  6. ' ************************************************************************
  7. '
  8. rez=XBIOS(4)
  9. IF rez=0 OR rez=2 THEN
  10.   ALERT 1,"Medium Resoulution Only!",1,"sorry",b
  11.   END
  12. ENDIF
  13. '
  14. SETCOLOR 0,7,0,7        !Violet Background color
  15. DEFMOUSE 3              !Pointing hand for mouse
  16. voicechange=&HC0        !MIDI program change
  17. stylechange=&HCF        !MIDI rhythm change
  18. mididata=0              !initialize voice/style data
  19. midimode=0              !initialize select mode
  20. midi$=""                !initialize MIDI text string
  21. n=0                     !initialize MIDI array subscript
  22. interval=0              !initialize time interval between presets
  23. presets=0               !initialize # of presets
  24. presetno=0              !initialize preset counter
  25. viewbutton=1            !initialize view selection button
  26. selecionbutton=1        !initialize select button
  27. DIM a$(100)             !initialize MIDI text string array
  28. DIM voice(100)          !initialize voice preset array
  29. DIM style(100)          !initialize style preset array
  30. DIM presetflag(100)     !initialize preset flag array
  31. '
  32. ' Set up for GEM main menu
  33. '
  34. DIM m$(25)
  35. m$(0)=" Desk "
  36. m$(1)=" About Program "
  37. m$(2)="-----------------------"
  38. m$(3)="1"
  39. m$(4)="2"
  40. m$(5)="3"
  41. m$(6)="4"
  42. m$(7)="5"
  43. m$(8)="6"
  44. m$(9)=""
  45. m$(10)="Menus"
  46. m$(11)="Voice Menu 1"
  47. m$(12)="Voice Menu 2"
  48. m$(13)="Style Menu 1"
  49. m$(14)="Style Menu 2"
  50. m$(15)=""
  51. m$(16)="Execute"
  52. m$(17)="Make Selections"
  53. m$(18)="View Selections"
  54. m$(19)="Play Tune"
  55. m$(20)="Quit Yamaha PSS-480"
  56. m$(21)=""
  57. m$(22)="Help"
  58. m$(23)="Menus"
  59. m$(24)="Execute"
  60. '
  61. CLS
  62. aboutyam
  63. MENU m$()
  64. ON MENU GOSUB main
  65. DO
  66.   ON MENU
  67. LOOP
  68. '
  69. PROCEDURE main          !Main Menu loop
  70.   button=MENU(0)
  71.   MENU OFF
  72.   IF button=MENU(2) THEN
  73.     aboutyam            !Display dialog box
  74.   ENDIF
  75.   IF button=11 THEN
  76.     voice1              !Draw and execute Screen 1
  77.   ENDIF
  78.   IF button=12 THEN
  79.     voice2              !Draw and execute Screen 2
  80.   ENDIF
  81.   IF button=13 THEN
  82.     style1              !Draw and execute Screen 3
  83.   ENDIF
  84.   IF button=14 THEN
  85.     style2              !Draw and execute Screen 4
  86.   ENDIF
  87.   IF button=17 THEN
  88.     IF selecionbutton>1 THEN
  89.       CLS
  90.       MENU m$()
  91.       DEFTEXT 1,1,0,14    !Text=red,bold,left-right,small script
  92.       message$="You have already made your selections.  Press Esc to Play tune"
  93.       TEXT 20,100,message$
  94.       DO UNTIL INKEY$=CHR$(27)
  95.       LOOP
  96.       playselect
  97.     ELSE
  98.       midimode=1          !set selection mode=ON
  99.       presetno            !get # of presets
  100.       INC selecionbutton
  101.     ENDIF
  102.   ENDIF
  103.   IF button=18 THEN
  104.     IF viewbutton>1 THEN
  105.       CLS
  106.       MENU m$()
  107.       DEFTEXT 1,1,0,14    !Text=red,bold,left-right,small script
  108.       message$="You have already made your selections.  Press Esc to Play tune"
  109.       TEXT 20,100,message$
  110.       DO UNTIL INKEY$=CHR$(27)
  111.       LOOP
  112.       playselect
  113.     ELSE
  114.       summarize         !display current voice and rhythm preset selections
  115.       INC viewbutton
  116.     ENDIF
  117.   ENDIF
  118.   IF button=19 THEN
  119.     playselect          !play all preset selections based on interval
  120.   ENDIF
  121.   IF button=20 THEN
  122.     SETCOLOR 0,7,7,7    !Reset to default GEM colors
  123.     END                 !Quit and return to GEM
  124.   ENDIF
  125.   IF button=23 THEN
  126.     helpmenus
  127.   ENDIF
  128.   IF button=24 THEN
  129.     helpexecute
  130.   ENDIF
  131. RETURN
  132. '
  133. PROCEDURE aboutyam      !Dialog Box describing this program
  134.   lx=100                !Note:GFA Companion created most of this
  135.   rx=539
  136.   ty=20
  137.   by=189
  138.   '
  139.   '
  140.   SGET tempuse$
  141.   DIM linstyle%(12),credline$(12)
  142.   linstyle%(0)=1
  143.   linstyle%(1)=1
  144.   linstyle%(2)=1
  145.   linstyle%(3)=0
  146.   linstyle%(4)=0
  147.   linstyle%(5)=0
  148.   linstyle%(6)=0
  149.   linstyle%(7)=0
  150.   linstyle%(8)=0
  151.   linstyle%(9)=0
  152.   linstyle%(10)=0
  153.   linstyle%(11)=0
  154.   linstyle%(12)=0
  155.   credline$(1)="         By Michael Silverstein"
  156.   credline$(2)="       Written with GFA Basic 3.07"
  157.   credline$(3)=""
  158.   credline$(4)="Left Click to select Voice or Rhythm."
  159.   credline$(5)="Right Click to change Menus."
  160.   credline$(6)="Use 'Execute' to Automate Selections!"
  161.   credline$(7)=""
  162.   credline$(8)=""
  163.   credline$(9)=""
  164.   credline$(10)=""
  165.   credline$(11)=""
  166.   credline$(12)=""
  167.   DEFFILL 0,2,8
  168.   DEFLINE 1,2
  169.   @aboutyam.lstgrowbox(lx,ty,10,10,lx,ty,rx-lx,by-ty)
  170.   PBOX lx,ty,rx,by
  171.   BOX lx,ty,rx,by
  172.   DEFLINE 1,1
  173.   BOX lx+5,ty+2,rx-5,by-2
  174.   DEFTEXT 1,linstyle%(0),0,13
  175.   offset=22
  176.   TEXT lx+55,ty+20,"       Yamaha PSS480 Voice & Rhythm Changer"
  177.   FOR x=1 TO 3
  178.     DEFTEXT 1,linstyle%(x),
  179.     TEXT lx+55,(ty+25+(x)*offset),credline$(x)
  180.   NEXT x
  181.   offset=15
  182.   FOR x=4 TO 12
  183.     DEFTEXT 1,linstyle%(x),0,8
  184.     TEXT lx+25,(ty+25+(x)*offset),credline$(x)
  185.   NEXT x
  186.   DEFTEXT 1,1,0,6
  187.   TEXT lx+182,by-9,"Continue"
  188.   DEFLINE 1,2
  189.   BOX lx+175,by-19,rx-186,by-4
  190.   REPEAT
  191.     junk$=INKEY$
  192.     k=MOUSEK
  193.     x=MOUSEX
  194.     y=MOUSEY
  195.   UNTIL k=1 AND x>lx+175 AND x<rx-186 AND y>by-19 AND y<by-4 OR junk$<>""
  196.   '
  197.   DEFFILL 1,2,8
  198.   PBOX lx+175,by-19,rx-186,by-4
  199.   ERASE linstyle%()
  200.   ERASE credline$()
  201.   SPUT tempuse$
  202.   CLR tempuse$,junk$
  203.   @aboutyam.lstshrinkbox(lx,ty,20,5,lx,ty,rx-lx,by-ty)
  204. RETURN
  205. '
  206. '
  207. ' These are the GEM™ GRAF_GROWBOX & GRAF_SHRINKBOX Routines
  208. ' Init stands for Initial(X,Y,Height) and Fin stands for Final(X,Y,Height)
  209. PROCEDURE aboutyam.lstgrowbox(init_x%,init_y%,init_w%,init_h%,fin_x%,fin_y%,fin_w%,fin_h%)
  210.   DPOKE GINTIN,init_x%
  211.   DPOKE GINTIN+2,init_y%
  212.   DPOKE GINTIN+4,init_w%
  213.   DPOKE GINTIN+6,init_h%
  214.   DPOKE GINTIN+8,fin_x%
  215.   DPOKE GINTIN+10,fin_y%
  216.   DPOKE GINTIN+12,fin_w%
  217.   DPOKE GINTIN+14,fin_h%
  218.   GEMSYS 73
  219. RETURN
  220. PROCEDURE aboutyam.lstshrinkbox(fin_x%,fin_y%,fin_w%,fin_h%,init_x%,init_y%,init_w%,init_h%)
  221.   DPOKE GINTIN,fin_x%
  222.   DPOKE GINTIN+2,fin_y%
  223.   DPOKE GINTIN+4,fin_w%
  224.   DPOKE GINTIN+6,fin_h%
  225.   DPOKE GINTIN+8,init_x%
  226.   DPOKE GINTIN+10,init_y%
  227.   DPOKE GINTIN+12,init_w%
  228.   DPOKE GINTIN+14,init_h%
  229.   GEMSYS 74
  230. RETURN
  231. '
  232. ' ****************************************************************************
  233. ' The Next four procedures implement the 4 display screens featuring all     *
  234. ' possible voices and styles for the Yamaha-PSS480 Synthesizer.  Each screen *
  235. ' displays a 12 X 5 matrix of rectangles representing all the instruments    *
  236. ' and rhythms(since there are at least 100 for each, 2 screens are need for  *
  237. '  each).  The items in the rectangles are of type string and listed in DATA *
  238. ' statements. The x1,x2,y1,y2 values represent the coordinates for each      *
  239. ' rectangle.  A LOOP WITHIN A LOOP Structure is used to create the boxes.    *
  240. '                                                                            *
  241. ' The Graphics for the rectangle are initialized to a filled bit pattern     *
  242. ' with normal medium resolution text in transparent mode.                    *
  243. '                                                                            *
  244. ' Once the user selects 1 of the 4 screens from the Gem Menus a REPEAT UNTIL *
  245. ' loop is used with 6 FOR NEXT loops inside.  This time the count            *
  246. ' value represents the corresponding MIDI preset # for voice or style        *
  247. ' on which screen is used.  The loop is exited (in order to display another  *
  248. ' screen or quit) via the right mouse button.                                *
  249. '                                                                            *
  250. ' If Select mode = ON, then the preset #, and text will be saved in the      *
  251. ' appropriate array instead of being sent to the synthesizer.                *
  252. ' ****************************************************************************
  253. '
  254. PROCEDURE voice1
  255.   '
  256.   mididata=1                    !initialize for voicedata
  257.   RESTORE voices1               !Point to DATA items
  258.   DEFTEXT 2,1,0,6               !Text=red,bold,left-right,small script
  259.   DEFFILL ,1                    !bitpattern=filled
  260.   GRAPHMODE 2                   !transparent mode
  261.   '
  262.   x1=10                         !initialize rectangle coordinates
  263.   y1=15
  264.   x2=125
  265.   y2=28
  266.   FOR i=1 TO 5                  !create column display
  267.     IF i>1 THEN
  268.       x1=x1+120                 !set up next column
  269.       x2=x2+120
  270.       y1=15
  271.       y2=28
  272.     ENDIF
  273.     FOR j=1 TO 12               !create row display
  274.       READ midi$                !Get text
  275.       createmidibutton          !Draw the rectangle
  276.     NEXT j
  277.   NEXT i
  278.   '
  279.   voices1:
  280.   DATA Synth Brass,Jazz Organ,Pipe Organ 1,Piano 1,Harpsichord 1
  281.   DATA Elec Piano 1,Celesta,Vibraphone,Marimba 1,Steel drum 1,Violin 1,Cello
  282.   DATA Jazz Guitar,Rock Guitar 1,Wood Bass 1,Trumpet,Trombone,Horn,Soprano Sax
  283.   DATA Clarinet,Flute,Oboe,Harmonica,Whistle
  284.   DATA Music Box,Honky-Tonk,Toy Piano,Trans Organ,Tremolo Organ,Church Organ
  285.   DATA Funky Clavi,Accordion,Glokenspiel,Hawaii Guitar,Banjo,Bowed Bass
  286.   DATA Acous Guitar,Harp,Picked Bass,Slap Bass,Ukelele,Strings,Alpenhorn
  287.   DATA Bagpipe,Mute Trumpet,Tenor Sax,Jug,Panflute
  288.   DATA Ice Block,Reed Organ,Elec Organ,Pipe Organ 2,Piano 2,Harpsichord 2
  289.   DATA Elec Piano 2,Glass Celesta,Bandoneon,Street Organ,Synth Bass,Marimba 2
  290.   '
  291.   REPEAT
  292.     '
  293.     RESTORE voices1             !point to first DATA item
  294.     '
  295.     x1=10                       !1st column coordinates
  296.     y1=15
  297.     x2=125
  298.     y2=28
  299.     '
  300.     FOR i=1 TO 12               !send voices from 1st column
  301.       sendmidi
  302.     NEXT i
  303.     '
  304.     x1=130                      !2nd column coordinates
  305.     y1=15
  306.     x2=245
  307.     y2=28
  308.     '
  309.     FOR i=13 TO 24              !send voices from 2nd column
  310.       sendmidi
  311.     NEXT i
  312.     '
  313.     x1=250                      !3rd column coordinates
  314.     y1=15
  315.     x2=365
  316.     y2=28
  317.     '
  318.     FOR i=25 TO 36              !send voices from 3rd column
  319.       sendmidi
  320.     NEXT i
  321.     '
  322.     x1=370                      !4th column coordinates
  323.     y1=15
  324.     x2=485
  325.     y2=28
  326.     '
  327.     FOR i=37 TO 48              !send voices from 4th column
  328.       sendmidi
  329.     NEXT i
  330.     '
  331.     x1=490                      !5th column coordinates
  332.     y1=15
  333.     x2=605
  334.     y2=28
  335.     '
  336.     FOR i=49 TO 60              !send voices from 5th column
  337.       sendmidi
  338.     NEXT i
  339.     '
  340.     i=1                         !reset counter and preset #
  341.     PAUSE 15                    !prevent mouse bounce
  342.     EXIT IF presetno>presets    !don't continue selections if > preset #
  343.     '
  344.   UNTIL MOUSEK=2                !exit for right mouse button
  345.   '
  346.   RESTORE voices1               !point to 1st DATA item
  347.   '
  348. RETURN
  349. '
  350. PROCEDURE voice2
  351.   '
  352.   mididata=1                    !initialize for voicedata
  353.   RESTORE voices2               !Point to DATA items
  354.   DEFTEXT 2,1,0,6               !Text=red,bold,left-right,small script
  355.   DEFFILL ,1                    !bitpattern=filled
  356.   GRAPHMODE 2                   !transparent mode
  357.   '
  358.   x1=10                         !initialize rectangle coordinates
  359.   y1=15
  360.   x2=125
  361.   y2=28
  362.   FOR i=1 TO 5                  !create column display
  363.     IF i>1 THEN
  364.       x1=x1+120                 !set up next column
  365.       x2=x2+120
  366.       y1=15
  367.       y2=28
  368.     ENDIF
  369.     FOR j=1 TO 12               !create row display
  370.       READ midi$                !Get text
  371.       createmidibutton          !Draw the rectangle
  372.     NEXT j
  373.   NEXT i
  374.   '
  375.   voices2:
  376.   DATA Steel Drum 2,Chimes,Tubular Bells,Hand Bell,Carillon,Synth Tom,Timpani
  377.   DATA Violin 2,Rock Guitar 2,Tremolo Guitar,Rock Guitar 3,Pedal Guitar
  378.   DATA 12 Strings ,Classic Guitar,Mandolin,Sitar,Koto,Shamisen,Jamisen
  379.   DATA Mute Bass,Elec Bass,Wood Bass 2,Elec Trumpet,Wow Trumpet,Tuba,Alto Sax
  380.   DATA Bass Clarinet,Bassoon,Recorder,Ocarina,Piccolo,Samba Whistle,Brass
  381.   DATA Woodwind,Human Voice 1,Human Voice 2,Human Chorus,Kazoo,Saw,Sinewave
  382.   DATA Bank 1,Bank 2,Bank 3,Bank 4,Bank 5
  383.   '
  384.   DATA ,,,,,,,,,,,,,,                           !need dummy strings
  385.   '
  386.   REPEAT
  387.     '
  388.     RESTORE voices2             !point to 1st DATA item
  389.     '
  390.     x1=10                       !1st column coordinates
  391.     y1=15
  392.     x2=125
  393.     y2=28
  394.     '
  395.     FOR i=61 TO 72              !send voices from 1st column
  396.       sendmidi
  397.     NEXT i
  398.     '
  399.     x1=130                      !2nd column coordinates
  400.     y1=15
  401.     x2=245
  402.     y2=28
  403.     '
  404.     FOR i=73 TO 84              !send voices from 2nd column
  405.       sendmidi
  406.     NEXT i
  407.     '
  408.     x1=250                      !3rd column coordinates
  409.     y1=15
  410.     x2=365
  411.     y2=28
  412.     '
  413.     FOR i=85 TO 96              !send voices from 3rd column
  414.       sendmidi
  415.     NEXT i
  416.     '
  417.     x1=370                      !4th column coordinates
  418.     y1=15
  419.     x2=485
  420.     y2=28
  421.     '
  422.     FOR i=97 TO 105             !send voices from 4th column
  423.       sendmidi
  424.     NEXT i
  425.     '
  426.     i=1                         !reset counter and preset #
  427.     PAUSE 15                    !prevent mouse bounce
  428.     EXIT IF presetno>presets    !don't continue selections if > preset #
  429.     '
  430.   UNTIL MOUSEK=2                !exit loop for right mouse button
  431.   '
  432.   RESTORE voices2               !point to 1st DATA item
  433.   '
  434. RETURN
  435. '
  436. PROCEDURE style1
  437.   '
  438.   mididata=2                    !initialize for styledata
  439.   RESTORE styles1               !Point to DATA items
  440.   DEFTEXT 2,1,0,6               !Text=red,bold,left-right,small script
  441.   DEFFILL ,1                    !bitpattern=filled
  442.   GRAPHMODE 2                   !transparent mode
  443.   '
  444.   x1=10                         !initialize rectangle coordinates
  445.   y1=15
  446.   x2=125
  447.   y2=28
  448.   FOR i=1 TO 5                  !create column display
  449.     IF i>1 THEN
  450.       x1=x1+120                 !set up next column
  451.       x2=x2+120
  452.       y1=15
  453.       y2=28
  454.     ENDIF
  455.     FOR j=1 TO 12               !create row display
  456.       READ midi$               !Get text
  457.       createmidibutton         !Draw the rectangle
  458.     NEXT j
  459.   NEXT i
  460.   '
  461.   styles1:
  462.   DATA Rhythm/Blues 1,Rhythm/Blues 2,Slow Blues,Gospel,Disco,Rap,Safari,Fusion 1
  463.   DATA Fusion 2,16 Beat 1,16 Beat 2,Techno Rock 1,Techno Rock 2,Funk 1,Funk 2
  464.   DATA Funk 3,Funk 4,Rock N Roll 1,Rock N Roll 2,Rock N Roll 3,Rock Ballad
  465.   DATA Hard Rock,Heavy Metal,Speed Metal,Pop Rock 1,Pop Rock 2,Rock Baroque
  466.   DATA Christmas Rock,Oriental Rock,Brass Rock,Swing Guitar,Swing Piano
  467.   DATA Swing Organ,Swing Vibes,Big Band 1,Big Band 2,Big Band 3,Big Band Waltz
  468.   DATA Modern Jazz,Jazz Waltz,5/4 Swing,Jazz Ballad,Shuffle,Boogie 1,Boogie 2
  469.   DATA Boogie 3,Boogie 4,Boogie 5,Dixie Combo,Dixie Banjo,Jazz Baroque
  470.   DATA Bossa Nova 1,Bossa Nova 2,Samba 1,Samba 2,Samba 3,Salsa 1,Salsa 2
  471.   DATA Salsa 3,Tango
  472.   '
  473.   REPEAT
  474.     RESTORE styles1             !point to first DATA item
  475.     '
  476.     x1=10                       !1st column coordinates
  477.     y1=15
  478.     x2=125
  479.     y2=28
  480.     '
  481.     FOR i=1 TO 12               !send styles from 1st column
  482.       sendmidi
  483.     NEXT i
  484.     '
  485.     x1=130                      !2nd column coordinates
  486.     y1=15
  487.     x2=245
  488.     y2=28
  489.     '
  490.     FOR i=13 TO 24              !send styles from 2nd column
  491.       sendmidi
  492.     NEXT i
  493.     '
  494.     x1=250                      !3rd column coordinates
  495.     y1=15
  496.     x2=365
  497.     y2=28
  498.     '
  499.     FOR i=25 TO 36              !send styles from 3rd column
  500.       sendmidi
  501.     NEXT i
  502.     '
  503.     x1=370                      !4th column coordinates
  504.     y1=15
  505.     x2=485
  506.     y2=28
  507.     '
  508.     FOR i=37 TO 48              !send styles from 4th column
  509.       sendmidi
  510.     NEXT i
  511.     '
  512.     x1=490                      !5th column coordinates
  513.     y1=15
  514.     x2=605
  515.     y2=28
  516.     '
  517.     FOR i=49 TO 60              !send styles from 5th column
  518.       sendmidi
  519.     NEXT i
  520.     '
  521.     i=1                         !reset counter and preset #
  522.     PAUSE 15                    !prevent mouse bounce
  523.     EXIT IF presetno>presets    !don't continue selections if > preset #
  524.     '
  525.   UNTIL MOUSEK=2                !exit for right mouse button
  526.   '
  527.   RESTORE styles1               !point to 1st DATA item
  528.   '
  529. RETURN
  530. '
  531. PROCEDURE style2
  532.   '
  533.   mididata=2                    !initialize for styledata
  534.   RESTORE styles2               !Point to DATA items
  535.   DEFTEXT 2,1,0,6               !Text=red,bold,left-right,small script
  536.   DEFFILL ,1                    !bitpattern=filled
  537.   GRAPHMODE 2                   !transparent mode
  538.   '
  539.   x1=10                         !initialize rectangle coordinates
  540.   y1=15
  541.   x2=125
  542.   y2=28
  543.   FOR i=1 TO 5                  !create column display
  544.     IF i>1 THEN
  545.       x1=x1+120                 !set up next column
  546.       x2=x2+120
  547.       y1=15
  548.       y2=28
  549.     ENDIF
  550.     FOR j=1 TO 12               !create row display
  551.       READ midi$                !Get text
  552.       createmidibutton          !Draw the rectangle
  553.     NEXT j
  554.   NEXT i
  555.   '
  556.   styles2:
  557.   DATA Habanera,Mambo 1,Mambo 2,Mambo 3,Rhumba,Cha-Cha-Cha,Conga,Merengue
  558.   DATA Calypso 1,Calypso 2,Son Afro,Reggae,Cuban,Beguine,Island Folk
  559.   DATA Mariachi,Argentine,March 1,March 2,Majestic March,Fanfare,Lullaby
  560.   DATA Baroque,Baroqu Waltz,String Quartet,Viennese,Polka,Bolero,Flamenco
  561.   DATA Class Guitar,Ragtime Piano,Country,Country Piano,Country Guitar
  562.   DATA Bluegrass,Street Organ,Hawaiian,Mandolin,Chanson,Barbershop
  563.   DATA ,,,,,,,,,,,,,,,,,,,
  564.   REPEAT
  565.     '
  566.     RESTORE styles2             !point to 1st DATA item
  567.     '
  568.     x1=10                       !1st column coordinates
  569.     y1=15
  570.     x2=125
  571.     y2=28
  572.     '
  573.     FOR i=61 TO 72              !send styles from 1st column
  574.       sendmidi
  575.     NEXT i
  576.     '
  577.     x1=130                      !2nd column coordinates
  578.     y1=15
  579.     x2=245
  580.     y2=28
  581.     '
  582.     FOR i=73 TO 84              !send styles from 2nd column
  583.       sendmidi
  584.     NEXT i
  585.     '
  586.     x1=250                      !3rd column coordinates
  587.     y1=15
  588.     x2=365
  589.     y2=28
  590.     '
  591.     FOR i=85 TO 96              !send styles from 3rd column
  592.       sendmidi
  593.     NEXT i
  594.     '
  595.     x1=370                      !4th column coordinates
  596.     y1=15
  597.     x2=485
  598.     y2=28
  599.     '
  600.     FOR i=97 TO 100             !send styles from 4th column
  601.       sendmidi
  602.     NEXT i
  603.     '
  604.     i=1                         !reset counter and preset #
  605.     PAUSE 15                    !prevent mouse bounce
  606.     EXIT IF presetno>presets    !don't continue selections if > preset #
  607.     '
  608.   UNTIL MOUSEK=2                !exit loop for right mouse button
  609.   '
  610.   RESTORE styles2               !point to 1st DATA item
  611.   '
  612. RETURN
  613. '
  614. PROCEDURE createmidibutton
  615.   '
  616.   PBOX x1,y1,x2,y2              !create each midi box for each row
  617.   TEXT x1+1,y1+8,midi$          !place text inside box
  618.   y1=y1+15                      !update the row position
  619.   y2=y2+15
  620.   '
  621. RETURN
  622. '
  623. PROCEDURE sendmidi
  624.   '
  625.   READ midi$                    !read text
  626.   a=MOUSEX                      !get mouse x coordinate
  627.   b=MOUSEY                      !get mouse y coordinate
  628.   IF a>x1 AND b>y1 AND a<x2 AND b<y2 THEN
  629.     IF MOUSEK=1 THEN            !if left mouse button was pressed
  630.       DEFFILL ,1
  631.       DEFTEXT 3                 !change text color to green
  632.       PBOX x1,y1,x2,y2          !redraw box
  633.       TEXT x1+1,y1+8,midi$      !redraw text
  634.       IF midimode=0 THEN
  635.         IF mididata=1 THEN      !check voice/style flag
  636.           OUT 3,voicechange,i-1 !output voice data thru MIDI port
  637.         ELSE
  638.           OUT 3,stylechange,i-1 !output style data thru MIDI port
  639.         ENDIF
  640.       ELSE IF midimode=1
  641.         PRINT AT(60,1);"Preset = ";presetno+1;  !display count
  642.         INC presetno                            !increment the preset count
  643.         IF presetno>=presets THEN
  644.           PRINT AT(60,1);"Done!               " !don't allow more selections
  645.         ENDIF
  646.         a$(n)=midi$             !store text
  647.         IF mididata=1 THEN
  648.           voice(n)=i-1          !store voice preset #
  649.           presetflag(n)=mididata !store voice flag
  650.           INC n                 !increment array subscript
  651.         ELSE
  652.           style(n)=i-1          !store style preset #
  653.           presetflag(n)=mididata !store style flag
  654.           INC n                 !increment array subscript
  655.         ENDIF
  656.       ENDIF
  657.     ENDIF
  658.   ENDIF
  659.   y1=y1+15                      !update row position
  660.   y2=y2+15
  661.   '
  662. RETURN
  663. '
  664. PROCEDURE playselect
  665.   '
  666.   CLS                           !Clear the screen
  667.   x1=10                         !set up cursor positions
  668.   x2=40
  669.   y1=12
  670.   y2=12
  671.   PRINT AT(x1,10);"VOICES"
  672.   PRINT AT(x2,10);"RHYTHMS"
  673.   PRINT AT(50,24);"Press Start/Stop on Synth"
  674.   '
  675.   DO
  676.     start=INP(3)                !get MIDI data from synth
  677.   LOOP UNTIL start=&HFA         !wait for start/stop button on synth
  678.   '
  679.   DO
  680.     n=0                         !initialize array subscript
  681.     FOR p=1 TO presets
  682.       IF presetflag(n)=1 THEN
  683.         PRINT AT(x1,y1);a$(n)   !display voice text string
  684.         INC y1                  !update voice row
  685.         OUT 3,voicechange,voice(n) !send current voice preset # to synth
  686.       ELSE IF presetflag(n)=2
  687.         PRINT AT(x2,y2);a$(n)   !display style text string
  688.         INC y2                  !update style row
  689.         OUT 3,stylechange,style(n) !send current style preset # to synth
  690.       ENDIF
  691.       INC n                     !update array subscript
  692.       FOR k=1 TO interval       !delay loop based on time interval
  693.         stop=INP(3)             !check for start/stop button on synth
  694.         EXIT IF stop=&HFC
  695.       NEXT k
  696.       EXIT IF stop=&HFC
  697.     NEXT p
  698.     EXIT IF stop=&HFC
  699.   LOOP
  700.   '
  701.   CLS                           !clear the screen
  702.   CLR midimode                  !clear all variables
  703.   selecionbutton=1
  704.   viewbutton=1
  705.   MENU m$()                     !display main menu
  706.   '
  707. RETURN
  708. '
  709. PROCEDURE presetno
  710.   '
  711.   CLS
  712.   MENU m$()
  713.   CLR presets,presetno,n        !initialize all pertinent variables
  714.   DEFTEXT 1,1,0,12,0
  715.   message$="How Many Presets?"  !get # of presets
  716.   TEXT 10,60,message$
  717.   presets1$=INPUT$(1)           !get first character
  718.   TEXT 150,60,presets1$         !echo back
  719.   presets2$=INPUT$(1)           !get second character
  720.   TEXT 160,60,presets2$         !echo back
  721.   presets=VAL(presets1$+presets2$) !# of presets = 1st & 2nd combined
  722.   IF presets<1 OR presets>99 THEN
  723.     message$="Input Error!"
  724.     TEXT 10,90,message$
  725.     CLR n,midimode            !clear all variables
  726.     CLR presets,presetno      !initialize all pertinent variables
  727.     selecionbutton=1
  728.     viewbutton=1
  729.     GOTO donepresetno
  730.   ENDIF
  731.   timeint                       !get time interval in between presets
  732.   '
  733.   donepresetno:
  734. RETURN
  735. '
  736. PROCEDURE summarize
  737.   '
  738.   CLS
  739.   DEFTEXT 1,1,0,14               !Text=red,bold,left-right,small script
  740.   selecion$="C u r r e n t   V o i c e   a n d   R h y t h m   P r e s e t s"
  741.   TEXT 20,12,selecion$
  742.   DEFFILL ,1                    !bitpattern=filled
  743.   GRAPHMODE 2                   !transparent mode
  744.   '
  745.   n=0                           !initialize array subscript
  746.   x1=10                         !initialize rectangle coordinates
  747.   y1=15
  748.   x2=125
  749.   y2=28
  750.   FOR i=1 TO 5                  !create column display
  751.     IF i>1 THEN
  752.       x1=x1+120                 !set up next column
  753.       x2=x2+120
  754.       y1=15
  755.       y2=28
  756.     ENDIF
  757.     FOR j=1 TO 12               !create row display
  758.       midi$=a$(n)               !Get text
  759.       IF presetflag(n)=1 THEN
  760.         DEFTEXT 2,1,0,6         !use red for voice selections
  761.       ELSE
  762.         DEFTEXT 3,1,0,6         !use green for style selections
  763.       ENDIF
  764.       createmidibutton          !Draw the rectangle
  765.       INC n                     !update to next text array
  766.     NEXT j
  767.   NEXT i
  768.   '
  769.   DO
  770.   LOOP UNTIL MOUSEK=2           !wait for right mouse key
  771.   '
  772.   CLS                           !Clear screen
  773.   MENU m$()                     !display main menu
  774. RETURN
  775. '
  776. '
  777. PROCEDURE timeint               !created via GFA Companion
  778.   '
  779.   lx=190
  780.   rx=450
  781.   ty=15
  782.   by=150
  783.   SGET tempuse$
  784.   GRAPHMODE 1
  785.   DEFFILL 1,2,2
  786.   DEFTEXT 1,0,0,6
  787.   DEFLINE 1,3
  788.   @timeint.lstgrowbox(lx,ty,10,10,lx,ty,rx-lx,by-ty)
  789.   PBOX lx,ty,rx,by
  790.   BOX lx,ty,rx,by
  791.   DEFLINE 1,1
  792.   TEXT lx+30,ty+10,"  Preset Time Interval  "
  793.   DEFFILL 1,2,8
  794.   PBOX lx+25,ty+25,rx-200,ty+40
  795.   PBOX lx+25,ty+45,rx-200,ty+60
  796.   PBOX lx+25,ty+65,rx-200,by-55
  797.   PBOX lx+25,by-50,rx-200,by-35
  798.   DEFFILL 0,2,8
  799.   PBOX lx+25,ty+25,rx-203,ty+39
  800.   PBOX lx+25,ty+45,rx-203,ty+59
  801.   PBOX lx+25,ty+65,rx-203,by-56
  802.   PBOX lx+25,by-50,rx-203,by-36
  803.   BOX lx+25,ty+25,rx-203,ty+39
  804.   BOX lx+27,ty+27,rx-205,ty+37
  805.   BOX lx+25,ty+45,rx-203,ty+59
  806.   BOX lx+27,ty+47,rx-205,ty+57
  807.   BOX lx+25,ty+65,rx-203,by-56
  808.   BOX lx+27,ty+67,rx-205,ty+77
  809.   BOX lx+25,by-50,rx-203,by-36
  810.   BOX lx+27,by-48,rx-205,by-38
  811.   TEXT lx+38,ty+35,"1"
  812.   TEXT lx+38,ty+55,"2"
  813.   TEXT lx+38,by-60,"3"
  814.   TEXT lx+38,by-40,"4"
  815.   TEXT lx+68,ty+35,"       fastest       "
  816.   TEXT lx+68,ty+55,"       less fast     "
  817.   TEXT lx+68,by-60,"       more slower   "
  818.   TEXT lx+68,by-40,"       slowest       "
  819.   ' Now to get answers for you
  820.   CLR choice1,choice2,choice3,choice4
  821.   interval=0
  822.   REPEAT
  823.     x=MOUSEX
  824.     y=MOUSEY
  825.     k=MOUSEK
  826.     IF x>lx+27 AND x<rx-205 AND y>ty+27 AND y<ty+37 AND k=1
  827.       interval=750
  828.       IF choice1=1
  829.         DEFTEXT 1
  830.         GRAPHMODE 1
  831.         DEFLINE 1,1
  832.         DEFFILL 1,2,8
  833.         PBOX lx+25,ty+25,rx-200,ty+40
  834.         DEFFILL 0,2,8
  835.         PBOX lx+25,ty+25,rx-203,ty+39
  836.         BOX lx+25,ty+25,rx-203,ty+39
  837.         BOX lx+27,ty+27,rx-205,ty+37
  838.         TEXT lx+38,ty+35,"1"
  839.         choice1=0
  840.       ELSE
  841.         GRAPHMODE 2
  842.         choice1=1
  843.         DEFFILL 0,2,8
  844.         PBOX lx+25,ty+25,rx-200,ty+40
  845.         DEFFILL 1,2,8
  846.         PBOX lx+25,ty+25,rx-203,ty+39
  847.         DEFLINE 0,1
  848.         GRAPHMODE 3
  849.         BOX lx+27,ty+27,rx-205,ty+37
  850.         DEFTEXT 0
  851.         TEXT lx+38,ty+35,"1"
  852.       ENDIF
  853.     ENDIF
  854.     IF x>lx+27 AND x<rx-205 AND y>ty+47 AND y<ty+57 AND k=1
  855.       interval=1500
  856.       IF choice2=1
  857.         DEFTEXT 1
  858.         GRAPHMODE 1
  859.         DEFLINE 1,1
  860.         DEFFILL 1,2,8
  861.         PBOX lx+25,ty+45,rx-200,ty+60
  862.         DEFFILL 0,2,8
  863.         PBOX lx+25,ty+45,rx-203,ty+59
  864.         BOX lx+25,ty+45,rx-203,ty+59
  865.         BOX lx+27,ty+47,rx-205,ty+57
  866.         TEXT lx+38,ty+55,"2"
  867.         choice2=0
  868.       ELSE
  869.         GRAPHMODE 2
  870.         choice2=1
  871.         DEFFILL 0,2,8
  872.         PBOX lx+25,ty+45,rx-200,ty+60
  873.         DEFFILL 1,2,8
  874.         PBOX lx+25,ty+45,rx-203,ty+59
  875.         DEFLINE 0,1
  876.         GRAPHMODE 3
  877.         BOX lx+27,ty+47,rx-205,ty+57
  878.         DEFTEXT 0
  879.         TEXT lx+38,ty+55,"2"
  880.       ENDIF
  881.     ENDIF
  882.     IF x>lx+27 AND x<rx-205 AND y>ty+67 AND y<ty+77 AND k=1
  883.       interval=3000
  884.       IF choice3=1
  885.         DEFTEXT 1
  886.         GRAPHMODE 1
  887.         DEFLINE 1,1
  888.         DEFFILL 1,2,8
  889.         PBOX lx+25,ty+65,rx-200,by-55
  890.         DEFFILL 0,2,8
  891.         PBOX lx+25,ty+65,rx-203,by-56
  892.         BOX lx+25,ty+65,rx-203,by-56
  893.         BOX lx+27,ty+67,rx-205,ty+77
  894.         TEXT lx+38,by-60,"3"
  895.         choice3=0
  896.       ELSE
  897.         GRAPHMODE 2
  898.         choice3=1
  899.         DEFFILL 0,2,8
  900.         PBOX lx+25,ty+65,rx-200,by-55
  901.         DEFFILL 1,2,8
  902.         PBOX lx+25,ty+65,rx-203,by-56
  903.         DEFLINE 0,1
  904.         GRAPHMODE 3
  905.         BOX lx+27,ty+67,rx-205,ty+77
  906.         DEFTEXT 0
  907.         TEXT lx+38,by-60,"3"
  908.       ENDIF
  909.     ENDIF
  910.     IF x>lx+27 AND x<rx-203 AND y>by-48 AND y<by-28 AND k=1
  911.       interval=4500
  912.       IF choice4=1
  913.         DEFTEXT 1
  914.         GRAPHMODE 1
  915.         DEFLINE 1,1
  916.         DEFFILL 1,2,8
  917.         PBOX lx+25,by-50,rx-200,by-35
  918.         DEFFILL 0,2,8
  919.         PBOX lx+25,by-50,rx-203,by-36
  920.         BOX lx+25,by-50,rx-203,by-36
  921.         BOX lx+27,by-48,rx-205,by-38
  922.         TEXT lx+38,by-40,"4"
  923.         choice4=0
  924.       ELSE
  925.         GRAPHMODE 2
  926.         choice4=1
  927.         DEFFILL 0,2,8
  928.         PBOX lx+25,by-50,rx-200,by-35
  929.         DEFFILL 1,2,8
  930.         PBOX lx+25,by-50,rx-203,by-36
  931.         DEFLINE 0,1
  932.         GRAPHMODE 3
  933.         BOX lx+27,by-48,rx-205,by-38
  934.         DEFTEXT 0
  935.         TEXT lx+38,by-40,"4"
  936.       ENDIF
  937.     ENDIF
  938.   UNTIL interval<>0
  939.   PAUSE 5
  940.   GRAPHMODE 1
  941.   DEFLINE 1
  942.   DEFTEXT 1
  943.   SPUT tempuse$
  944.   @timeint.lstshrinkbox(lx,ty,20,5,lx,ty,rx-lx,by-ty)
  945.   CLR tempuse$
  946.   CLS
  947.   MENU m$()
  948.   '
  949. RETURN
  950. '
  951. ' These are the GEM™ GRAF_GROWBOX & GRAF_SHRINKBOX Routines
  952. ' Init stands for Initial(X,Y,Height) and Fin stands for Final(X,Y,Height)
  953. PROCEDURE timeint.lstgrowbox(init_x%,init_y%,init_w%,init_h%,fin_x%,fin_y%,fin_w%,fin_h%)
  954.   '
  955.   DPOKE GINTIN,init_x%
  956.   DPOKE GINTIN+2,init_y%
  957.   DPOKE GINTIN+4,init_w%
  958.   DPOKE GINTIN+6,init_h%
  959.   DPOKE GINTIN+8,fin_x%
  960.   DPOKE GINTIN+10,fin_y%
  961.   DPOKE GINTIN+12,fin_w%
  962.   DPOKE GINTIN+14,fin_h%
  963.   GEMSYS 73
  964.   '
  965. RETURN
  966. PROCEDURE timeint.lstshrinkbox(fin_x%,fin_y%,fin_w%,fin_h%,init_x%,init_y%,init_w%,init_h%)
  967.   '
  968.   DPOKE GINTIN,fin_x%
  969.   DPOKE GINTIN+2,fin_y%
  970.   DPOKE GINTIN+4,fin_w%
  971.   DPOKE GINTIN+6,fin_h%
  972.   DPOKE GINTIN+8,init_x%
  973.   DPOKE GINTIN+10,init_y%
  974.   DPOKE GINTIN+12,init_w%
  975.   DPOKE GINTIN+14,init_h%
  976.   GEMSYS 74
  977.   '
  978. RETURN
  979. REM ###################### end  TIMEINT.LST  procedure ####################
  980. '
  981. PROCEDURE helpmenus
  982.   CLS
  983.   LOCATE 20,1
  984.   PRINT "YAMAHA PSS-480 VOICE AND STYLE CHANGER."
  985.   PRINT
  986.   PRINT "Welcome to the Yamaha PSS-480 voice and style changer.  This program"
  987.   PRINT "allows you to change a voice or style (rhythm) via the mouse.  This "
  988.   PRINT "is a plus since all the voices and styles are kind of small on the "
  989.   PRINT "synthesizer itself; you can see the selections alot clearer on the"
  990.   PRINT "computer screen.  There are 4 menus that are set up in a 12 X 5 matrix"
  991.   PRINT "where menus 1 & 2 are for the voices and menus 3 & 4 are for the "
  992.   PRINT "styles.  Since there are at least 100 presets for each, they are "
  993.   PRINT "broken up into 2 menus apiece.  Basically, you use the right mouse"
  994.   PRINT "button to bring up the pull-down menus and select one of the 4 menus."
  995.   PRINT "and when the screen fills up with a menu, you use the left mouse "
  996.   PRINT "button to select the voice or style....It's that simple!  The display"
  997.   PRINT "on the Yamaha should indicate which preset no was selected (Note:"
  998.   PRINT "the MIDI mode should be on Keyboard Assign Mode[00] thoughout the"
  999.   PRINT "use of this program!).  The color of the voice or style should "
  1000.   PRINT "change when it is selected.  The color scheme of the entire program "
  1001.   PRINT "works best with the system default colors."
  1002.   PRINT
  1003.   PRINT "DA's work fine with this program.  I recommend QuickST or Turbo ST"
  1004.   PRINT "which will fill the screen up faster than normal since GFA Graphics"
  1005.   PRINT "commands are used to create the boxes and text."
  1006.   PRINT
  1007.   PRINT "Click right mouse button to return to the main menu."
  1008.   DO UNTIL MOUSEK=2
  1009.   LOOP
  1010.   CLS
  1011.   MENU m$()
  1012. RETURN
  1013. '
  1014. PROCEDURE helpexecute
  1015.   CLS
  1016.   LOCATE 20,1
  1017.   PRINT "AUTOMATING SELECTIONS"
  1018.   PRINT
  1019.   PRINT "This program also allows you to select up to 99 voices and styles"
  1020.   PRINT "(presets) to be automatically sent to the Yamaha when playing it"
  1021.   PRINT "real-time.  The following is a description of all dropdown items:"
  1022.   PRINT
  1023.   PRINT "Make Selections: enter the total # of presets, followed by a time"
  1024.   PRINT "interval between each selection.  Then use the Voice or Style Menus"
  1025.   PRINT "and make all your selections.  You can call up as many menus as you"
  1026.   PRINT "want."
  1027.   PRINT
  1028.   PRINT "View Selections: lists all selections where red indicates voice,green"
  1029.   PRINT "indicates style.  This is also the order in which the selections will"
  1030.   PRINT "be sent."
  1031.   PRINT
  1032.   PRINT "Play Tune: Press Start/Stop on Yamaha.  The display will list all"
  1033.   PRINT "selections as they are sent to the synth.  The delay between selections"
  1034.   PRINT "is based on the time interval.  The program will cycle through all"
  1035.   PRINT "selections and then continuously loop.  Press Start/Stop again to return"
  1036.   PRINT "control back to the ST."
  1037.   PRINT
  1038.   PRINT "Quit Yamaha PSS-480: Quit program and return to desktop."
  1039.   PRINT
  1040.   PRINT "Click Right mouse button to return to the main menu."
  1041.   DO UNTIL MOUSEK=2
  1042.   LOOP
  1043.   CLS
  1044.   MENU m$()
  1045. RETURN
  1046.