home *** CD-ROM | disk | FTP | other *** search
/ Set of Apple II Hard Drive Images / hard.hdv / HARD / MIDIPLAY / MIDI.INFO (.txt) < prev    next >
Encoding:
Applesoft BASIC Source Code  |  1995-12-13  |  4.9 KB  |  184 lines  |  [FC] Applesoft BASIC Program (0x0801)

  1. 0  GOTO 3: REM   IF PROGRAM INVOKED - GOES TO LINE 1 OR 2
  2. 1 AU = 1: REM  AUTO TRACK ASSIGNMENT.  IF ENTER AT LINE 2, AUTO PROGRAM, MANUAL TRACK ASSIGNMENT
  3. 2 PG = 1: PRINT  CHR$(4)"OPEN /RAMAEPC/R": PRINT  CHR$(4)"READ /RAMAEPC/R": INPUT JU$: INPUT F$: PRINT  CHR$(4)"CLOSE /RAMAEPC/R": PRINT  CHR$(4)"PREFIX "JU$
  4. 3  PRINT  CHR$(4)"PREFIX": INPUT PR$
  5. 5  HGR2 : HGR : TEXT : HOME 
  6. 7 T$ = "$D7": REM   FILE TYPE 
  7. 8  DIM B(32),L(32): REM  ARRAYS FOR BYTE AND LENGTH DATA
  8. 9 RM$ = "/RAMAEPC": REM  PREFIX OF RAMDISK FOR SAVING TRACKS
  9. 10  PRINT "MIDI FILE FORMAT INFO READER"
  10. 15  PRINT : PRINT "PREFIX=";PR$
  11. 16  IF PG = 1  THEN  PRINT "FILE=";F$
  12. 17  IF PG = 1  THEN 100
  13. 20  PRINT : PRINT "PRESS RETURN FOR CATALOG"
  14. 25  PRINT "TYPE / TO CHANGE PREFIX"
  15. 27  PRINT 
  16. 30  INPUT "NAME OF MIDI FILE:";F$
  17. 35  IF  LEFT$(F$,1) = "/"  THEN  INPUT "NEW PREFIX:";PR$: PRINT  CHR$(4)"PREFIX "PR$: HOME : GOTO 10
  18. 40  IF F$ = ""  THEN  PRINT  CHR$(4)"CAT,T"T$: GOTO 20
  19. 100  PRINT "COPYING FILE TO RAMDISK..."
  20. 101  PRINT  CHR$(4)"COPY "F$",/RAMAEPC/"F$
  21. 105 F$ = "/RAMAEPC/" +F$
  22. 107  PRINT  CHR$(4)"UNLOCK "F$
  23. 110  GOSUB 10000
  24. 140  PRINT : PRINT 
  25. 150  HTAB 5: PRINT "BLOCK NAME";: HTAB 25: PRINT "BYTE";: HTAB 35: PRINT "LENGTH"
  26. 160  HTAB 5: PRINT "----------";: HTAB 25: PRINT "----";: HTAB 35: PRINT "------"
  27. 170 P = 8192
  28. 180  PRINT CT;")";: HTAB 5
  29. 200  IF  PEEK(P) = 0  THEN 300
  30. 205  REM  PRINT BLOCK NAME
  31. 210  IF  PEEK(P) < >0  THEN P = P +1: GOTO 210: REM  SKIP THE MTRK STRING
  32. 230 L =  PEEK(P +1) *65536 + PEEK(P +2) *256 + PEEK(P +3)
  33. 232 P = P +4
  34. 233 B(CT) = B +P -8192
  35. 234 L(CT) = L
  36. 235  IF  PEEK(P +1) < >255  THEN 238
  37. 236  IF  PEEK(P +2) < >3  THEN 238
  38. 237 A = P +3: GOSUB 2000: PRINT  LEFT$(I$,20);
  39. 238 T = CT: GOSUB 1000: REM  LOAD TRACK ON RAMDISK
  40. 239  HTAB 25: PRINT B(CT);: HTAB 35: PRINT L(CT)
  41. 240 CT = CT +1
  42. 241  IF CT >MT  THEN 300
  43. 242 P = P +L
  44. 245 B = B +P -8192
  45. 250  PRINT  CHR$(4)"BLOAD "F$", A$2000,L$100,T"T$",B"B
  46. 290  IF CT < = MT  THEN 170
  47. 300  REM  GOT ALL TRACK ADDRESSES
  48. 305  PRINT  CHR$(4)"DELETE"F$: REM  DELETE RAM VERSION!!!
  49. 310  REM  GOSUB 20000:REM CALCULATE SPEED
  50. 311 SP = 27
  51. 350  IF AU < >1  THEN  INPUT "(A)UTO OR (M)ANUAL ASSIGNMENT? (DEF=A):";AM$
  52. 360 AU = 1: IF  LEFT$(AM$,1) = "M"  THEN AU = 0: GOTO 400
  53. 390  PRINT 
  54. 395  IF MT = 1  THEN 700
  55. 397  IF MT = 2  THEN 800
  56. 399  IF AU = 1  THEN  GOSUB 30000: GOTO 500: REM  AUTOMATIC ASSIGNMENT"
  57. 400  GOSUB 20000: REM  CALC SPEED FOR MANUAL ASG
  58. 403  PRINT "TYPE 0 WHEN DONE CHOOSING TRACKS (MAX 16)"
  59. 405 TT = 0
  60. 410  PRINT "TRACK ";TT;": ";
  61. 415  INPUT "";UT$
  62. 420  IF  VAL(UT$) = 0  THEN 500
  63. 430 UT =  VAL(UT$)
  64. 440  IF UT <1  OR UT >MT  THEN  PRINT "OUT OF RANGE - TRY AGAIN": GOTO 410
  65. 442  IF TT < = 9  THEN NF$ = "/T" + STR$(TT)
  66. 444  IF TT > = 10  THEN NF$ = "/T" + CHR$( ASC("A") +TT -10)
  67. 450  PRINT  CHR$(4)"RENAME "RM$"/";"TK"; STR$(UT);",";RM$;NF$
  68. 455  IF TT = 0  THEN N0 = UT: REM  SAVE TRK# OF TRK 0 FOR PUTTING IN SPEED
  69. 460 TT = TT +1
  70. 470  IF TT <16  THEN  GOTO 410
  71. 500  REM  DONE CHOOSING TRACKS
  72. 510  GOSUB 25000: REM  PUT SPEED INTO TRACK 0
  73. 530  POKE 767,TT: REM   PASS #TRKS TO OTHER PROGRAM 
  74. 540  PRINT  CHR$(4)"PREFIX"RM$
  75. 550  PRINT  CHR$(4)"RUN MULTIPLAY,@1"
  76. 599  END 
  77. 600  REM  DON'T PLAY IT
  78. 699  END 
  79. 700  REM  MIDI FILE FORMAT 0
  80. 710  PRINT  CHR$(4)"RENAME "RM$"/TK1,"RM$"/T0"
  81. 711 N0 = 1: REM  TRK # OF T0
  82. 712  GOSUB 25000: REM   PUT SPEED INTO TRACK 0  
  83. 715 TT = 1
  84. 720  GOTO 500
  85. 800  REM  MIDI FILE FORMAT 1
  86. 810  PRINT  CHR$(4)"RENAME "RM$"/TK2,"RM$"/T0"
  87. 811 N0 = 1: REM  TRK # OF T0
  88. 812  GOSUB 25000: REM   PUT SPEED INTO TRACK 0    
  89. 815 TT = 1
  90. 820  GOTO 500
  91. 999  END 
  92. 1000  REM   SUBRT TO LOAD TRACK # T INTO RAMDISK 
  93. 1001  POKE 8192,0: POKE 8193,144: POKE 8194,0: POKE 8195,0
  94. 1002 N$ = RM$ +"/TK" + STR$(T)
  95. 1003  PRINT  CHR$(4)"BSAVE "N$",A$2000,E$2003"
  96. 1005  IF L(T) >16384  THEN 1100
  97. 1020  PRINT  CHR$(4)"BLOAD "F$",A$2000,T"T$",B"B(T)",L"L(T)
  98. 1030  PRINT  CHR$(4)"BSAVE "N$",A$2000,B4,L"L(T)
  99. 1040  GOTO 1999
  100. 1100  FOR I = 0 TO L(T)  STEP 16384
  101. 1110  PRINT  CHR$(4)"BLOAD "F$",A$2000,T"T$",B"B(T) +I",L$4000"
  102. 1120  IF I >L(T)  THEN 1200
  103. 1150  IF L(T) -I >16384  THEN 1190
  104. 1170  PRINT  CHR$(4)"BSAVE "N$",A$2000,L"L(T) -I",B"I +4
  105. 1179  GOTO 1200
  106. 1190  PRINT  CHR$(4)"BSAVE "N$",A$2000,L$4000,B"I +4
  107. 1199  GOTO 1200
  108. 1200  NEXT I
  109. 1999  RETURN 
  110. 2000  REM  SUBRT TO READ INSTRUMENT NAME FROM THE TRACK
  111. 2005 S =  PEEK(A)
  112. 2007  IF S = 0  THEN 2040
  113. 2010 I$ = ""
  114. 2020  FOR J = 1 TO S
  115. 2025 I$ = I$ + CHR$( PEEK(J +A))
  116. 2027  NEXT J
  117. 2040  RETURN 
  118. 10000  REM   LOAD DESIRED TRACK AT $2000
  119. 10002  PRINT  CHR$(4)"BLOAD"F$",A$2000,l$200,T"T$: PRINT : PRINT 
  120. 10004  REM   CHECK HEADER (MThd)
  121. 10005  IF  PEEK(8192) = 77  AND  PEEK(8193) = 84  AND  PEEK(8194) = 104  AND  PEEK(8195) = 100  THEN 10100
  122. 10020  PRINT "UNKNOWN HEADER"
  123. 10099  RETURN 
  124. 10100  IF  PEEK(8192 +9) < >0  THEN 10200
  125. 10110  PRINT "MIDI FILE FORMAT TYPE 0"
  126. 10111 MT = 1
  127. 10115  RETURN 
  128. 10120 B1 =  PEEK(8192 +4) *16777216 + PEEK(8192 +5) *65536 + PEEK(8192 +6) *256 + PEEK(8192 +7)
  129. 10130 A2 = 8192 +8 +B1 +4:B2 =  PEEK(A2) *16777216 + PEEK(A2 +1) *65536 + PEEK(A2 +2) *256 + PEEK(A2 +3)
  130. 10140  PRINT  CHR$(4)"BLOAD"F$",A$2000,T"T$",B"A2 +4 -8192",L"B2
  131. 10199  RETURN 
  132. 10200  IF  PEEK(8192 +9) < >1  THEN 10300
  133. 10210  PRINT "MIDI FILE FORMAT TYPE 1": PRINT  PEEK(8192 +11)" TRACKS"
  134. 10211 MT =  PEEK(8192 +11)
  135. 10215  RETURN 
  136. 10220 B1 =  PEEK(8192 +4) *16777216 + PEEK(8192 +5) *65536 + PEEK(8192 +6) *256 + PEEK(8192 +7)
  137. 10230 A2 = 8192 +8 +B1 +4:B2 =  PEEK(A2) *16777216 + PEEK(A2 +1) *65536 + PEEK(A2 +2) *256 + PEEK(A2 +3)
  138. 10240 A3 = A2 +B2 +8:B3 =  PEEK(A3) *16777216 + PEEK(A3 +1) *65536 + PEEK(A3 +2) *256 + PEEK(A3 +3)
  139. 10250  PRINT  CHR$(4)"BLOAD"F$",A$2000,T"T$",B"A3 +4 -8192",L"B3
  140. 10299  RETURN 
  141. 20000  DEF  FN T(A) = .4889 *(26 +27 *A +5 *A *A)
  142. 20005  PRINT "CALCULATING SPEED...";
  143. 20010  PRINT  CHR$(4)"PREFIX/RAMAEPC"
  144. 20020  PRINT  CHR$(4)"BLOAD TK0,B8,L2,A$2000"
  145. 20040 BT =  PEEK(8192) *256 + PEEK(8193)
  146. 20050  IF BT = 0  THEN BT = 240
  147. 20060  PRINT  CHR$(4)"BLOAD TK1,A$2000,L4096"
  148. 20070 MS = 524288: REM  DEFAULT = 1/2 SEC PER QTR NOTE
  149. 20080 I = 8192
  150. 20090  IF  PEEK(I) = 255  AND  PEEK(I +1) = 81  AND  PEEK(I +2) = 3  THEN 20120
  151. 20100  IF  PEEK(I) = 255  AND  PEEK(I +1) = 47  THEN 20120
  152. 20105  IF I >8192 +4096  THEN 20120
  153. 20110 I = I +1: GOTO 20090
  154. 20120 I = I +3
  155. 20130 MS =  PEEK(I) *65536 + PEEK(I +1) *256 + PEEK(I +2)
  156. 20150 TM = MS/BT
  157. 20180 SP = 1
  158. 20190  IF  FN T(SP) >TM  THEN 20220
  159. 20200 SP = SP +1
  160. 20210  IF SP <128  THEN 20190
  161. 20220 SP = SP -1
  162. 20230  REM  SPEED = SP
  163. 20240  PRINT SP
  164. 20250  RETURN 
  165. 25000  REM  ADD HEADER TO T0
  166. 25010  REM  USES N0 TO GET LENGTH OF T0
  167. 25100 ED = L(N0) +8192 +4
  168. 25120  POKE 8192,0: POKE 8193,144: POKE 8194,0: POKE 8195,SP
  169. 25130  PRINT  CHR$(4)"BSAVE T0,A$2000,B0,L4"
  170. 25150  RETURN 
  171. 30000 TU = MT: IF MT >9  THEN TU = 9
  172. 30005  REM  ASSIGN TRACKS UP TO MAX
  173. 30010  FOR JJ = 1 TO TU
  174. 30020  PRINT  CHR$(4)"RENAME "RM$"/TK" STR$(JJ)","RM$"/T" STR$(JJ -1)
  175. 30030  NEXT 
  176. 30040  IF MT < = 9  THEN TT = TU: RETURN 
  177. 30050 TU = MT: IF MT >17  THEN TU = 17
  178. 30060  FOR JJ = 10 TO TU
  179. 30070  IF JJ < = 10  THEN NF$ = "/T" + STR$(JJ -1)
  180. 30080  IF JJ >10  THEN NF$ = "/T" + CHR$( ASC("A") +JJ -11)
  181. 30090  PRINT  CHR$(4)"RENAME "RM$"/TK" STR$(JJ)","RM$;NF$
  182. 30095  NEXT 
  183. 30098 TT = TU
  184. 30099  RETURN