home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Set of Apple II Hard Drive Images
/
hard.hdv
/
HARD
/
MIDI2
/
BACH.MIXER
(
.txt
)
< prev
next >
Encoding:
Amiga
Atari
Commodore
DOS
FM Towns/JPY
Macintosh
Macintosh JP
NeXTSTEP
RISC OS
UTF-8
Wrap
Applesoft BASIC Source Code
|
1990-10-27
|
1.7 KB
|
68 lines
|
[FC] Applesoft BASIC Program (0x0801)
1 REM MIXER FOR BACH 3 PT INV
2 REM SET UP ADDRESSES OF TRACKS IN 100
3 DIM P(20),D(20),C(20),N(20),V(20),S(20),E(20)
5 GOTO 100
10 P = P(T)
20 D = PEEK(P):P = P +1
30 IF D >127 THEN D = (D -128) *128 + PEEK(P):P = P +1
45 D(T) = D
50 IF PEEK(P) <128 OR PEEK(P) >160 THEN P = P +1: GOTO 50
65 C(T) = PEEK(P):N(T) = PEEK(P +1):V(T) = PEEK(P +2)
70 IF C(T) > = 144 THEN C(T) = 144 +T -1
75 IF C(T) <144 THEN C(T) = 128 +T -1
80 P = P +3
90 P(T) = P
99 RETURN
100 S(1) = 2 *4096 +5 *16 +1:E(1) = 2 *4096 +9 *256 +16
105 P(1) = S(1)
110 S(2) = 2 *4096 +9 *256 +2 *16 +11:E(2) = 3 *4096 +3 *16 +4
115 P(2) = S(2)
120 S(3) = 3 *4096 +4 *16 +14:E(3) = 3 *4096 +8 *256 +13 *16 +1
125 P(3) = S(3)
190 MT = 3
195 REM MT=NUMBER OF TRACKS TO MIX
199 MT = 3: REM NUMBER OF TRACKS TO MIX
200 S0 = 24576
205 REM S0=STARTING ADDRESS TO STORE MIXED TRACK
210 SQ = S0
215 REM SQ=CURRENT END OF SEQUENCE
1000 FOR T = 1 TO MT
1010 GOSUB 10
1020 NEXT T
1050 HOME
1100 REM GET SMALLEST OF ALL DURATIONS
1110 SM = 32768: FOR I = 1 TO MT: IF D(I) <SM THEN SM = D(I)
1120 NEXT
1150 IF SM <127 THEN POKE SQ,SM: GOTO 1160
1152 POKE SQ,128 + INT(SM/128)
1155 SQ = SQ +1
1157 POKE SQ,SM - INT(SM/128) *128
1160 SQ = SQ +1
1170 F = 0: REM FLAG WILL BECOME 1 IF MORE THAN ONE TRACK IS BEING ENTERED INTO SEQUENCE AT THIS TIME
1200 REM SUBTRACT SMALLEST FROM DUR IN EACH TRACK
1210 REM IF RESULT <=0, ADD NOTE TO SEQUENCE, AND GET NEXT NOTE OF TRACK
1220 FOR I = 1 TO MT
1230 D(I) = D(I) -SM
1240 IF D(I) >0 THEN 1300
1250 IF F < >0 THEN POKE SQ,0:SQ = SQ +1
1260 F = F +1
1270 POKE SQ,C(I): POKE SQ +1,N(I): POKE SQ +2,V(I):SQ = SQ +3
1280 T = I: GOSUB 10
1300 NEXT I
1400 VTAB 1
1410 FOR J = 1 TO MT: PRINT "TRACK "J":"P(J)" / "E(J): NEXT
1500 DN = 1: REM TRY TO PROVE NOT DONE
1510 FOR J = 1 TO MT
1520 IF P(J) <E(J) THEN DN = 0
1530 NEXT J
1540 IF NOT (DN) THEN 1100
1550 PRINT : PRINT "DONE:"
1600 PRINT : PRINT "SEQUENCE STORED IN MEMORY"
1610 PRINT S0" - "SQ
1650 POKE 6,S0 - INT(S0/256) *256
1660 POKE 7, INT(S0/256)
1670 POKE 8,SQ - INT(SQ/256) *256
1680 POKE 9, INT(SQ/256)
1690 POKE 255,16: REM TEMPO
1695 PRINT : PRINT
1700 PRINT "TO HEAR IT - BLOAD MIDI.PLAYBACK AND": PRINT "CALL 768": PRINT : PRINT "TO SAVE IT : BSAVE <NAME>,A"SO",E"SQ