home *** CD-ROM | disk | FTP | other *** search
/ Set of Apple II Hard Drive Images / hard.hdv / HARD / MIDI2 / BACH.MIXER (.txt) < prev    next >
Encoding:
Applesoft BASIC Source Code  |  1990-10-27  |  1.7 KB  |  68 lines  |  [FC] Applesoft BASIC Program (0x0801)

  1. 1  REM  MIXER FOR BACH 3 PT INV
  2. 2  REM  SET UP ADDRESSES OF TRACKS IN 100
  3. 3  DIM P(20),D(20),C(20),N(20),V(20),S(20),E(20)
  4. 5  GOTO 100
  5. 10 P = P(T)
  6. 20 D =  PEEK(P):P = P +1
  7. 30  IF D >127  THEN D = (D -128) *128 + PEEK(P):P = P +1
  8. 45 D(T) = D
  9. 50  IF  PEEK(P) <128  OR  PEEK(P) >160  THEN P = P +1: GOTO 50
  10. 65 C(T) =  PEEK(P):N(T) =  PEEK(P +1):V(T) =  PEEK(P +2)
  11. 70  IF C(T) > = 144  THEN C(T) = 144 +T -1
  12. 75  IF C(T) <144  THEN C(T) = 128 +T -1
  13. 80 P = P +3
  14. 90 P(T) = P
  15. 99  RETURN 
  16. 100 S(1) = 2 *4096 +5 *16 +1:E(1) = 2 *4096 +9 *256 +16
  17. 105 P(1) = S(1)
  18. 110 S(2) = 2 *4096 +9 *256 +2 *16 +11:E(2) = 3 *4096 +3 *16 +4
  19. 115 P(2) = S(2)
  20. 120 S(3) = 3 *4096 +4 *16 +14:E(3) = 3 *4096 +8 *256 +13 *16 +1
  21. 125 P(3) = S(3)
  22. 190 MT = 3
  23. 195  REM  MT=NUMBER OF TRACKS TO MIX    
  24. 199 MT = 3: REM  NUMBER OF TRACKS TO MIX
  25. 200 S0 = 24576
  26. 205  REM   S0=STARTING ADDRESS TO STORE MIXED TRACK
  27. 210 SQ = S0
  28. 215  REM  SQ=CURRENT END OF SEQUENCE
  29. 1000  FOR T = 1 TO MT
  30. 1010  GOSUB 10
  31. 1020  NEXT T
  32. 1050  HOME 
  33. 1100  REM  GET SMALLEST OF ALL DURATIONS
  34. 1110 SM = 32768: FOR I = 1 TO MT: IF D(I) <SM  THEN SM = D(I)
  35. 1120  NEXT 
  36. 1150  IF SM <127  THEN  POKE SQ,SM: GOTO 1160
  37. 1152  POKE SQ,128 + INT(SM/128)
  38. 1155 SQ = SQ +1
  39. 1157  POKE SQ,SM - INT(SM/128) *128
  40. 1160 SQ = SQ +1
  41. 1170 F = 0: REM  FLAG WILL BECOME 1 IF MORE THAN ONE TRACK IS BEING ENTERED INTO SEQUENCE AT THIS TIME
  42. 1200  REM  SUBTRACT SMALLEST FROM DUR IN EACH TRACK
  43. 1210  REM  IF RESULT <=0, ADD NOTE TO SEQUENCE, AND GET NEXT NOTE OF TRACK
  44. 1220  FOR I = 1 TO MT
  45. 1230 D(I) = D(I) -SM
  46. 1240  IF D(I) >0  THEN 1300
  47. 1250  IF F < >0  THEN  POKE SQ,0:SQ = SQ +1
  48. 1260 F = F +1
  49. 1270  POKE SQ,C(I): POKE SQ +1,N(I): POKE SQ +2,V(I):SQ = SQ +3
  50. 1280 T = I: GOSUB 10
  51. 1300  NEXT I
  52. 1400  VTAB 1
  53. 1410  FOR J = 1 TO MT: PRINT "TRACK "J":"P(J)" / "E(J): NEXT 
  54. 1500 DN = 1: REM   TRY TO PROVE NOT DONE
  55. 1510  FOR J = 1 TO MT
  56. 1520  IF P(J) <E(J)  THEN DN = 0
  57. 1530  NEXT J
  58. 1540  IF   NOT (DN)  THEN 1100
  59. 1550  PRINT : PRINT "DONE:"
  60. 1600  PRINT : PRINT "SEQUENCE STORED IN MEMORY"
  61. 1610  PRINT S0" - "SQ
  62. 1650  POKE 6,S0 - INT(S0/256) *256
  63. 1660  POKE 7, INT(S0/256)
  64. 1670  POKE 8,SQ - INT(SQ/256) *256
  65. 1680  POKE 9, INT(SQ/256)
  66. 1690  POKE 255,16: REM  TEMPO
  67. 1695  PRINT : PRINT 
  68. 1700  PRINT "TO HEAR IT - BLOAD MIDI.PLAYBACK AND": PRINT "CALL 768": PRINT : PRINT "TO SAVE IT : BSAVE <NAME>,A"SO",E"SQ