home *** CD-ROM | disk | FTP | other *** search
/ Set of Apple II Hard Drive Images / eric.hdv / OBJTEST / MIDI.INFO.bas < prev    next >
BASIC Source File  |  2020-08-13  |  7KB  |  173 lines

  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  GOSUB 20000: REM  CALCULATE SPEED
  50. 350  IF AU < >1  THEN  INPUT "(A)UTO OR (M)ANUAL ASSIGNMENT? (DEF=A):";AM$
  51. 360 AU = 1: IF  LEFT$(AM$,1) = "M"  THEN AU = 0: GOTO 400
  52. 390  PRINT 
  53. 395  IF MT = 1  THEN 700
  54. 397  IF MT = 2  THEN 800
  55. 399  IF AU = 1  THEN  GOSUB 30000: GOTO 500: REM  AUTOMATIC ASSIGNMENT"
  56. 400  PRINT "TYPE 0 WHEN DONE CHOOSING TRACKS (MAX 8)"
  57. 405 TT = 0
  58. 410  PRINT "TRACK ";TT;": ";
  59. 415  INPUT "";UT$
  60. 420  IF  VAL(UT$) = 0  THEN 500
  61. 430 UT =  VAL(UT$)
  62. 440  IF UT <1  OR UT >MT  THEN  PRINT "OUT OF RANGE - TRY AGAIN": GOTO 410
  63. 450  PRINT  CHR$(4)"RENAME "RM$"/";"TK"; STR$(UT);",";RM$;"/T"; STR$(TT)
  64. 455  IF TT = 0  THEN N0 = UT: REM  SAVE TRK# OF TRK 0 FOR PUTTING IN SPEED
  65. 460 TT = TT +1
  66. 470  IF TT <8  THEN  GOTO 410
  67. 500  REM  DONE CHOOSING TRACKS
  68. 510  GOSUB 25000: REM  PUT SPEED INTO TRACK 0
  69. 530  POKE 767,TT: REM   PASS #TRKS TO OTHER PROGRAM 
  70. 540  PRINT  CHR$(4)"PREFIX"RM$
  71. 550  PRINT  CHR$(4)"RUN MULTIPLAY,@1"
  72. 599  END 
  73. 600  REM  DON'T PLAY IT
  74. 699  END 
  75. 700  REM  MIDI FILE FORMAT 0
  76. 710  PRINT  CHR$(4)"RENAME "RM$"/TK1,"RM$"/T0"
  77. 711 N0 = 1: REM  TRK # OF T0
  78. 712  GOSUB 25000: REM   PUT SPEED INTO TRACK 0  
  79. 715 TT = 1
  80. 720  GOTO 500
  81. 800  REM  MIDI FILE FORMAT 1
  82. 810  PRINT  CHR$(4)"RENAME "RM$"/TK2,"RM$"/T0"
  83. 811 N0 = 1: REM  TRK # OF T0
  84. 812  GOSUB 25000: REM   PUT SPEED INTO TRACK 0    
  85. 815 TT = 1
  86. 820  GOTO 500
  87. 999  END 
  88. 1000  REM   SUBRT TO LOAD TRACK # T INTO RAMDISK 
  89. 1001  POKE 8192,0: POKE 8193,144: POKE 8194,0: POKE 8195,0
  90. 1002 N$ = RM$ +"/TK" + STR$(T)
  91. 1003  PRINT  CHR$(4)"BSAVE "N$",A$2000,E$2003"
  92. 1005  IF L(T) >16384  THEN 1100
  93. 1020  PRINT  CHR$(4)"BLOAD "F$",A$2000,T"T$",B"B(T)",L"L(T)
  94. 1030  PRINT  CHR$(4)"BSAVE "N$",A$2000,B4,L"L(T)
  95. 1040  GOTO 1999
  96. 1100  FOR I = 0 TO L(T)  STEP 16384
  97. 1110  PRINT  CHR$(4)"BLOAD "F$",A$2000,T"T$",B"B(T) +I",L$4000"
  98. 1120  IF I >L(T)  THEN 1200
  99. 1150  IF L(T) -I >16384  THEN 1190
  100. 1170  PRINT  CHR$(4)"BSAVE "N$",A$2000,L"L(T) -I",B"I +4
  101. 1179  GOTO 1200
  102. 1190  PRINT  CHR$(4)"BSAVE "N$",A$2000,L$4000,B"I +4
  103. 1199  GOTO 1200
  104. 1200  NEXT I
  105. 1999  RETURN 
  106. 2000  REM  SUBRT TO READ INSTRUMENT NAME FROM THE TRACK
  107. 2005 S =  PEEK(A)
  108. 2007  IF S = 0  THEN 2040
  109. 2010 I$ = ""
  110. 2020  FOR J = 1 TO S
  111. 2025 I$ = I$ + CHR$( PEEK(J +A))
  112. 2027  NEXT J
  113. 2040  RETURN 
  114. 10000  REM   LOAD DESIRED TRACK AT $2000
  115. 10002  PRINT  CHR$(4)"BLOAD"F$",A$2000,l$200,T"T$: PRINT : PRINT 
  116. 10004  REM   CHECK HEADER (MThd)
  117. 10005  IF  PEEK(8192) = 77  AND  PEEK(8193) = 84  AND  PEEK(8194) = 104  AND  PEEK(8195) = 100  THEN 10100
  118. 10020  PRINT "UNKNOWN HEADER"
  119. 10099  RETURN 
  120. 10100  IF  PEEK(8192 +9) < >0  THEN 10200
  121. 10110  PRINT "MIDI FILE FORMAT TYPE 0"
  122. 10111 MT = 1
  123. 10115  RETURN 
  124. 10120 B1 =  PEEK(8192 +4) *16777216 + PEEK(8192 +5) *65536 + PEEK(8192 +6) *256 + PEEK(8192 +7)
  125. 10130 A2 = 8192 +8 +B1 +4:B2 =  PEEK(A2) *16777216 + PEEK(A2 +1) *65536 + PEEK(A2 +2) *256 + PEEK(A2 +3)
  126. 10140  PRINT  CHR$(4)"BLOAD"F$",A$2000,T"T$",B"A2 +4 -8192",L"B2
  127. 10199  RETURN 
  128. 10200  IF  PEEK(8192 +9) < >1  THEN 10300
  129. 10210  PRINT "MIDI FILE FORMAT TYPE 1": PRINT  PEEK(8192 +11)" TRACKS"
  130. 10211 MT =  PEEK(8192 +11)
  131. 10215  RETURN 
  132. 10220 B1 =  PEEK(8192 +4) *16777216 + PEEK(8192 +5) *65536 + PEEK(8192 +6) *256 + PEEK(8192 +7)
  133. 10230 A2 = 8192 +8 +B1 +4:B2 =  PEEK(A2) *16777216 + PEEK(A2 +1) *65536 + PEEK(A2 +2) *256 + PEEK(A2 +3)
  134. 10240 A3 = A2 +B2 +8:B3 =  PEEK(A3) *16777216 + PEEK(A3 +1) *65536 + PEEK(A3 +2) *256 + PEEK(A3 +3)
  135. 10250  PRINT  CHR$(4)"BLOAD"F$",A$2000,T"T$",B"A3 +4 -8192",L"B3
  136. 10299  RETURN 
  137. 20000  DEF  FN T(A) = .4889 *(26 +27 *A +5 *A *A)
  138. 20005  PRINT "CALCULATING SPEED...";
  139. 20010  PRINT  CHR$(4)"PREFIX/RAMAEPC"
  140. 20020  PRINT  CHR$(4)"BLOAD TK0,B8,L2,A$2000"
  141. 20040 BT =  PEEK(8192) *256 + PEEK(8193)
  142. 20050  IF BT = 0  THEN BT = 240
  143. 20060  PRINT  CHR$(4)"BLOAD TK1,A$2000,L4096"
  144. 20070 MS = 524288: REM  DEFAULT = 1/2 SEC PER QTR NOTE
  145. 20080 I = 8192
  146. 20090  IF  PEEK(I) = 255  AND  PEEK(I +1) = 81  AND  PEEK(I +2) = 3  THEN 20120
  147. 20100  IF  PEEK(I) = 255  AND  PEEK(I +1) = 47  THEN 20120
  148. 20105  IF I >8192 +4096  THEN 20120
  149. 20110 I = I +1: GOTO 20090
  150. 20120 I = I +3
  151. 20130 MS =  PEEK(I) *65536 + PEEK(I +1) *256 + PEEK(I +2)
  152. 20150 TM = MS/BT
  153. 20180 SP = 1
  154. 20190  IF  FN T(SP) >TM  THEN 20220
  155. 20200 SP = SP +1
  156. 20210  IF SP <128  THEN 20190
  157. 20220 SP = SP -1
  158. 20230  REM  SPEED = SP
  159. 20240  PRINT SP
  160. 20250  RETURN 
  161. 25000  REM  ADD HEADER TO T0
  162. 25010  REM  USES N0 TO GET LENGTH OF T0
  163. 25100 ED = L(N0) +8192 +4
  164. 25120  POKE 8192,0: POKE 8193,144: POKE 8194,0: POKE 8195,SP
  165. 25130  PRINT  CHR$(4)"BSAVE T0,A$2000,B0,L4"
  166. 25150  RETURN 
  167. 30000 TU = MT: IF MT >9  THEN TU = 9
  168. 30005  REM  ASSIGN TRACKS UP TO MAX
  169. 30010  FOR JJ = 2 TO TU
  170. 30020  PRINT  CHR$(4)"RENAME "RM$"/TK" STR$(JJ)","RM$"/T" STR$(JJ -2)
  171. 30030  NEXT 
  172. 30040 TT = TU -1
  173. 30050  RETURN