home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Set of Apple II Hard Drive Images
/
eric.hdv
/
ANNMIDI
/
MIDIINFO.BAS
< prev
next >
Wrap
BASIC Source File
|
2020-08-13
|
7KB
|
172 lines
3 PRINT CHR$(4)"PREFIX": INPUT PR$
5 HGR2 : HGR : TEXT : HOME
7 T$ = "$D7": REM FILE TYPE
8 DIM B(32),L(32): REM ARRAYS FOR BYTE AND LENGTH DATA
9 RM$ = "/MIDITEST"
10 PRINT "MIDI FILE FORMAT INFO READER"
15 PRINT : PRINT "PREFIX=";PR$
20 PRINT : PRINT "PRESS RETURN FOR CATALOG"
25 PRINT "TYPE / TO CHANGE PREFIX"
27 PRINT
30 INPUT "NAME OF MIDI FILE:";F$
35 IF LEFT$(F$,1) = "/" THEN INPUT "NEW PREFIX:";PR$: PRINT CHR$(4)"PREFIX "PR$: HOME : GOTO 10
40 IF F$ = "" THEN PRINT CHR$(4)"CAT,T"T$: GOTO 20
100 PRINT "COPYING FILE..."
101 PRINT CHR$(4)"COPY "F$","RM$"/"F$
105 F$ = RM$ +"/" +F$
107 PRINT CHR$(4)"UNLOCK "F$
110 GOSUB 10000
140 PRINT : PRINT
150 HTAB 5: PRINT "BLOCK NAME";: HTAB 25: PRINT "BYTE";: HTAB 35: PRINT "LENGTH"
160 HTAB 5: PRINT "----------";: HTAB 25: PRINT "----";: HTAB 35: PRINT "------"
170 P = 8192
180 PRINT CT;")";: HTAB 5
200 IF PEEK(P) = 0 THEN 300
205 REM PRINT BLOCK NAME
210 IF PEEK(P) < >0 THEN P = P +1: GOTO 210: REM SKIP THE MTRK STRING
230 L = PEEK(P +1) *65536 + PEEK(P +2) *256 + PEEK(P +3)
232 P = P +4
233 B(CT) = B +P -8192
234 L(CT) = L
235 IF PEEK(P +1) < >255 THEN 238
236 IF PEEK(P +2) < >3 THEN 238
237 A = P +3: GOSUB 2000: PRINT LEFT$(I$,20);
238 T = CT: GOSUB 1000: REM LOAD TRACK ON RAMDISK
239 HTAB 25: PRINT B(CT);: HTAB 35: PRINT L(CT)
240 CT = CT +1
241 IF CT >MT THEN 300
242 P = P +L
245 B = B +P -8192
250 PRINT CHR$(4)"BLOAD "F$", A$2000,L$100,T"T$",B"B
290 IF CT < = MT THEN 170
300 REM GOT ALL TRACK ADDRESSES
305 PRINT CHR$(4)"DELETE"F$: REM DELETE RAM VERSION!!!
307 IF MT = 1 THEN SP = 27: GOTO 350: REM SKIP SPEED CALC FOR MFF0
310 GOSUB 20000: REM CALCULATE SPEED
350 IF AU < >1 THEN INPUT "(A)UTO OR (M)ANUAL ASSIGNMENT? (DEF=A):";AM$
360 AU = 1: IF LEFT$(AM$,1) = "M" THEN AU = 0: GOTO 400
390 PRINT
395 IF MT = 1 THEN 700
397 IF MT = 2 THEN 800
399 IF AU = 1 THEN GOSUB 30000: GOTO 500: REM AUTOMATIC ASSIGNMENT"
400 IF AU = 0 AND MT = 1 THEN GOSUB 20000: REM CALC SPEED IF DIDN'T DO IT BEFORE
403 PRINT "TYPE 0 WHEN DONE CHOOSING TRACKS (MAX 8)"
405 TT = 0
410 PRINT "TRACK ";TT;": ";
415 INPUT "";UT$
420 IF VAL(UT$) = 0 THEN 500
430 UT = VAL(UT$)
440 IF UT <1 OR UT >MT THEN PRINT "OUT OF RANGE - TRY AGAIN": GOTO 410
450 PRINT CHR$(4)"RENAME "RM$"/";"TK"; STR$(UT);",";RM$;"/T"; STR$(TT)
455 IF TT = 0 THEN N0 = UT: REM SAVE TRK# OF TRK 0 FOR PUTTING IN SPEED
460 TT = TT +1
470 IF TT <8 THEN GOTO 410
500 REM DONE CHOOSING TRACKS
510 GOSUB 25000: REM PUT SPEED INTO TRACK 0
530 POKE 767,TT: REM PASS #TRKS TO OTHER PROGRAM
535 IF MT = 1 AND AU = 1 THEN PRINT CHR$(4)"PREFIX"RM$: PRINT CHR$(4)"RUN MFF0PLAY.BAS": END
540 PRINT CHR$(4)"PREFIX"RM$
550 PRINT CHR$(4)"RUN MULTIPLAY,@1"
599 END
600 REM DON'T PLAY IT
699 END
700 REM MIDI FILE FORMAT 0
710 PRINT CHR$(4)"RENAME "RM$"/TK1,"RM$"/T0"
711 N0 = 1: REM TRK # OF T0
712 GOSUB 25000: REM PUT SPEED INTO TRACK 0
715 TT = 1
720 GOTO 500
800 REM MIDI FILE FORMAT 1
810 PRINT CHR$(4)"RENAME "RM$"/TK2,"RM$"/T0"
811 N0 = 1: REM TRK # OF T0
812 GOSUB 25000: REM PUT SPEED INTO TRACK 0
815 TT = 1
820 GOTO 500
999 END
1000 REM SUBRT TO LOAD TRACK # T INTO RAMDISK
1001 POKE 8192,0: POKE 8193,144: POKE 8194,0: POKE 8195,0
1002 N$ = RM$ +"/TK" + STR$(T)
1003 PRINT CHR$(4)"BSAVE "N$",A$2000,E$2003"
1005 IF L(T) >16384 THEN 1100
1020 PRINT CHR$(4)"BLOAD "F$",A$2000,T"T$",B"B(T)",L"L(T)
1030 PRINT CHR$(4)"BSAVE "N$",A$2000,B4,L"L(T)
1040 GOTO 1999
1100 FOR I = 0 TO L(T) STEP 16384
1110 PRINT CHR$(4)"BLOAD "F$",A$2000,T"T$",B"B(T) +I",L$4000"
1120 IF I >L(T) THEN 1200
1150 IF L(T) -I >16384 THEN 1190
1170 PRINT CHR$(4)"BSAVE "N$",A$2000,L"L(T) -I",B"I +4
1179 GOTO 1200
1190 PRINT CHR$(4)"BSAVE "N$",A$2000,L$4000,B"I +4
1199 GOTO 1200
1200 NEXT I
1999 RETURN
2000 REM SUBRT TO READ INSTRUMENT NAME FROM THE TRACK
2005 S = PEEK(A)
2007 IF S = 0 THEN 2040
2010 I$ = ""
2020 FOR J = 1 TO S
2025 I$ = I$ + CHR$( PEEK(J +A))
2027 NEXT J
2040 RETURN
10000 REM LOAD DESIRED TRACK AT $2000
10002 PRINT CHR$(4)"BLOAD"F$",A$2000,l$200,T"T$: PRINT : PRINT
10004 REM CHECK HEADER (MThd)
10005 IF PEEK(8192) = 77 AND PEEK(8193) = 84 AND PEEK(8194) = 104 AND PEEK(8195) = 100 THEN 10100
10020 PRINT "UNKNOWN HEADER"
10099 RETURN
10100 IF PEEK(8192 +9) < >0 THEN 10200
10110 PRINT "MIDI FILE FORMAT TYPE 0"
10111 MT = 1
10115 RETURN
10120 B1 = PEEK(8192 +4) *16777216 + PEEK(8192 +5) *65536 + PEEK(8192 +6) *256 + PEEK(8192 +7)
10130 A2 = 8192 +8 +B1 +4:B2 = PEEK(A2) *16777216 + PEEK(A2 +1) *65536 + PEEK(A2 +2) *256 + PEEK(A2 +3)
10140 PRINT CHR$(4)"BLOAD"F$",A$2000,T"T$",B"A2 +4 -8192",L"B2
10199 RETURN
10200 IF PEEK(8192 +9) < >1 THEN 10300
10210 PRINT "MIDI FILE FORMAT TYPE 1": PRINT PEEK(8192 +11)" TRACKS"
10211 MT = PEEK(8192 +11)
10215 RETURN
10220 B1 = PEEK(8192 +4) *16777216 + PEEK(8192 +5) *65536 + PEEK(8192 +6) *256 + PEEK(8192 +7)
10230 A2 = 8192 +8 +B1 +4:B2 = PEEK(A2) *16777216 + PEEK(A2 +1) *65536 + PEEK(A2 +2) *256 + PEEK(A2 +3)
10240 A3 = A2 +B2 +8:B3 = PEEK(A3) *16777216 + PEEK(A3 +1) *65536 + PEEK(A3 +2) *256 + PEEK(A3 +3)
10250 PRINT CHR$(4)"BLOAD"F$",A$2000,T"T$",B"A3 +4 -8192",L"B3
10299 RETURN
20000 DEF FN T(A) = .4889 *(26 +27 *A +5 *A *A)
20005 PRINT "CALCULATING SPEED...";
20010 PRINT CHR$(4)"PREFIX "RM$
20020 PRINT CHR$(4)"BLOAD TK0,B8,L2,A$2000"
20040 BT = PEEK(8192) *256 + PEEK(8193)
20050 IF BT = 0 THEN BT = 240
20060 PRINT CHR$(4)"BLOAD TK1,A$2000,L4096"
20070 MS = 524288: REM DEFAULT = 1/2 SEC PER QTR NOTE
20080 I = 8192
20090 IF PEEK(I) = 255 AND PEEK(I +1) = 81 AND PEEK(I +2) = 3 THEN 20120
20100 IF PEEK(I) = 255 AND PEEK(I +1) = 47 THEN 20120
20105 IF I >8192 +4096 THEN 20120
20110 I = I +1: GOTO 20090
20120 I = I +3
20130 MS = PEEK(I) *65536 + PEEK(I +1) *256 + PEEK(I +2)
20150 TM = MS/BT
20180 SP = 1
20190 IF FN T(SP) >TM THEN 20220
20200 SP = SP +1
20210 IF SP <128 THEN 20190
20220 SP = SP -1
20230 REM SPEED = SP
20240 PRINT SP
20250 RETURN
25000 REM ADD HEADER TO T0
25010 REM USES N0 TO GET LENGTH OF T0
25100 ED = L(N0) +8192 +4
25120 POKE 8192,0: POKE 8193,144: POKE 8194,0: POKE 8195,SP
25125 PRINT CHR$(4)"PREFIX "RM$
25130 PRINT CHR$(4)"BSAVE T0,A$2000,B0,L4"
25150 RETURN
30000 TU = MT: IF MT >9 THEN TU = 9
30005 REM ASSIGN TRACKS UP TO MAX
30010 FOR JJ = 2 TO TU
30020 PRINT CHR$(4)"RENAME "RM$"/TK" STR$(JJ)","RM$"/T" STR$(JJ -2)
30030 NEXT
30040 TT = TU -1
30050 RETURN