home *** CD-ROM | disk | FTP | other *** search
/ Set of Apple II Hard Drive Images / eric.hdv / ANNMIDI / MIDIINFO.BAS < prev    next >
BASIC Source File  |  2020-08-13  |  7KB  |  172 lines

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