Toque!
Este é, sem dúvida, um programa diferente! TOQUE! Transforma seu EXPERT num verdadeiro órgão eletrônico, colocando à sua disposição 8 instrumentos diferentes com cinco oitavas de tonalidades cada um!
Teste o programa no WebMSX – The Online MSX Emulator
TOQUE! já vem com 16 ritmos pré-gravados, mas você pode redefinir todos eles.
Aprenda, crie e execute músicas com TOQUE!!!
Autor: José Maurício Bussab
Software House: CEBI – Centro Educacional Brasileiro de Informática
Distribuição:Gradiente Industrial S.A.
Código fonte
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 |
5 ONERRORGOTO65000:GOSUB60000:CLEAR:DIM V10,V9,P2,NS,P1,ST,MR,FR,I,R,KF,NT,VI,A$,H 10 DIM RT(16,16),NB(16),R(17),O(5),P1(18),HR(8),P2(18),NS(18),NT(500),OP(6),OP$(6,15),OY(6),NO$(6),OX(6),SX(15),E(6),AF(15) 20 FOR N=1 TO 10:KEY N,"":NEXT 40 N$="ZSXDCVGBHNJM,L.`/":N2$=" QWERT" 50 POKE64683!,1:ON INTERVAL=15 GOSUB 1000 60 ON KEY GOSUB 2000,2010,8000,8100,8200,8300,8400,8500,8600 70 OI=3 80 FOR I=1 TO 16:FOR N=1 TO 16:READ RT(N,I):NEXT N,I 90 DATA 2,4,0,4,2,4,2,4,2,4,0,4,2,4,2,3 95 DATA 2,0,4,4,4,0,4,0,2,0,4,0,2,0,4,0 100 DATA 2,0,3,2,0,3,2,0,3,2,3,3,0,0,0,0 105 DATA 2,0,1,0,2,0,5,0,2,0,1,0,2,0,5,0 110 DATA 2,0,3,2,2,1,0,2,2,3,0,2,2,0,1,2 115 DATA 2,0,5,2,2,5,0,2,5,0,0,5,2,2,5,2 120 DATA 2,0,5,0,5,0,2,0,5,0,5,0,0,2,3,3 125 DATA 2,0,3,0,5,0,3,0,5,0,3,0,0,0,0,0 130 DATA 2,5,2,2,5,2,2,3,2,5,2,2,5,0,5,5 135 DATA 2,0,4,4,2,0,4,0,2,0,4,0,0,5,2,0 140 DATA 3,0,0,0,3,0,0,0,3,0,0,0,3,0,0,0 145 DATA 2,0,3,0,5,0,3,0,2,0,3,0,5,0,3,0 150 DATA 2,3,3,5,3,3,2,3,3,5,3,5,2,0,1,2 155 DATA 2,0,5,0,2,0,5,2,0,2,1,1,2,2,3,3 160 DATA 2,2,0,0,3,0,0,0,0,0,2,2,5,0,2,0 165 DATA 2,0,5,2,0,2,5,0,2,0,5,0,2,2,5,5 170 FOR N=17TO 1 STEP -1:READ R(N):NEXT N 180 DATA 1396,1478,1566,1660 190 DATA 1760,1864,1972,2092,2216,2348,2488,2636,2792,2956,3132,3320,3520 200 FOR N=1 TO 5:READ O(N):NEXT N 210 DATA 1,2,4,8,16 220 FOR N=1 TO 8:READ P1(N),HR(N),P2(N),NS(N):NEXT N 230 DATA .5,2,.5,0,1,2,1,0,.1,3,.1,0,4,4,2,0,.2,5.1,.1,0,.1,7,.1,-1,2,3,2,-1,.02,7,.03,0 240 IN=1:P1=P1(1):P2=P2(1):H=HR(1):NS=NS(1) 245 AF=7.2243E-03:BF=1.03974:FOR N=0 TO 15:AF(N)=BF-AF*N:NEXT N 250 FOR N=1 TO 16:READ NB(N):NEXT N:DATA 16,16,12,16,16,16,12,12,16,12,16,16,12,16,16,16 260 GOSUB 61000 270 GOSUB10000:A$="TOQUE ! - produzido pelo CEBI":GOSUB 9700 280 KF=AF(7):RT=1:ST=1:FR=2:INTERVAL OFF:T=0:FOR I=1 TO 10:KEY (I) ON:NEXT 300 SOUND 10,V10:SOUND 9,V9:V9=V9-P2:IF V9<0 THEN V9=0 320 IF NS THEN SOUND 7,16:SOUND 6,1 ELSE SOUND 7,49 340 V10=V10-P1:IF V10<0 THEN V10=0 350 ON ST GOTO 360,360,550,600 360 A$=INKEY$:IF A$="" THEN 300 370 IF MR THEN 9000 ELSE IF A$=CHR$(13) THEN ON FR GOSUB 3000,3010 380 I=INSTR(N$,A$):IF I=0 THEN 300 400 R=R(I)*KF\O(OI):NT=R 410 IF MR THEN 9010 420 SOUND 5,R\256:SOUND 4,R MOD 256:SOUND 10,VI 440 SOUND 3,R\H\256:SOUND 2,R\H MOD 256:SOUND 9,VI\2:V10=VI:V9=VI:GOTO 300 550 IF INKEY$=CHR$(13) THEN IF FR=1 THEN C2=1:GOSUB 3000 ELSE GOSUB 3010 560 IF NT=0 THEN 300 ELSE R=NT:NT=0:GOTO 420 600 IF ST<>4 THEN 300 610 A$=INKEY$:IF A$="" THEN 600 615 IF A$=CHR$(13) THEN ON FR GOSUB 3000,3010 620 I=INSTR(N2$,A$):IF I=0 THEN 600 630 RT(T,RT)=I-1:GOTO 600 1000 IF T>=NB(RT) THEN T=0 1005 PUT SPRITE 0,(SX(T),153),6,0 1010 T=T+1:ON RT(T,RT)+1 GOSUB 1030,1040,1050,1060,1070,1080 1020 ON ST-1 GOSUB 1500,1600,1700 1030 RETURN 1040 SOUND 7,48:SOUND 0,0:SOUND 1,3:SOUND 6,10:SOUND 13,0:SOUND 11,1:SOUND 12,10:SOUND 8,16:RETURN 1050 SOUND 7,56:SOUND 0,255:SOUND 1,7:SOUND 6,31:SOUND 13,0:SOUND 11,255:SOUND 12,1:SOUND 8,16:RETURN 1060 SOUND 7,48:SOUND 6,0:SOUND 1,0:SOUND 0,17:SOUND 13,0:SOUND 11,1:SOUND 12,4:SOUND 8,16:RETURN 1070 SOUND 7,48:SOUND 6,1:SOUND 1,1:SOUND 0,0:SOUND 13,0:SOUND 11,1:SOUND 12,2:SOUND 8,16:RETURN 1080 SOUND 7,48:SOUND 6,8:SOUND 1,1:SOUND 0,200:SOUND 13,0:SOUND 11,1:SOUND 12,4:SOUND 8,16:RETURN 1500 NT(CN)=NT:NT=0:IF CN<500 THEN CN=CN+1 1550 RETURN 1600 NT=NT(C2):C2=C2+1:IF C2>CN THEN IF CO THEN C2=1 ELSE GOSUB 3010 1650 RETURN 1700 RETURN 2000 IF OI=1 THEN RETURN ELSE LINE(68+16*OI,144)-(80+16*OI,154),4,B:OI=OI-1:LINE (68+16*OI,144)-(80+16*OI,154),1,B:RETURN 2010 IF OI=5 THEN RETURN ELSE LINE(68+16*OI,144)-(80+16*OI,154),4,B:OI=OI+1:LINE (68+16*OI,144)-(80+16*OI,154),1,B:RETURN 3000 INTERVAL ON:FR=2:T=0:RETURN 3010 INTERVAL OFF:FR=1:PUT SPRITE 0,(202,153),1,0:RETURN 4500 IF RT=1 THEN RETURN ELSE RT=RT-1:RETURN 4510 IF RT=8 THEN RETURN ELSE RT=RT+1:RETURN 5000 IF ST>1 THEN ST=ST-1 5005 RETURN 5010 IF ST<4 THEN ST=ST+1 5015 RETURN 7000 DATA 52,24,7,instrum,piano 1,piano 2,clarineta,banjo,sino,vento,flauta andina,celesta 7010 DATA 58,40,15,ritmo,bolero 1,bolero 2,marcha 1,marcha 2,samba 1,samba 2,valsa 1,valsa 2,funk,guarƒnia,metr“nomo,disco,rock & roll,rock 1,rock 2,rock 3 7020 DATA 58,56,15,tempo,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16 7030 DATA 52,72,15,v instr,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 7040 DATA 61,88,15,afin,-7,-6,-5,-4,-3,-2,-1,0,+1,+2,+3,+4,+5,+6,+7,+8 7050 DATA 61,104,7,modo,normal,reprodu`„o,reprodu`„o repet,prog ritmo 16 tr,prog ritmo 12 tr,prog ritmo pp,prog melod tr,prog melod pp 7060 DATA 52,120,2,arquivo,n„o,grava fita,leitura fita 7500 A$="":GOSUB 9700:ON KEY GOSUB 8700,8700,8700,8700,8700,8700,8700,8700,8700:SOUND 10,0:SOUND 9,0:GOSUB 3010:E=E(K) 7503 IF K>4 THEN E(K)=0 7505 IF MR THEN CN=CN-1:MR=0 7510 X=108:Y=OY(K):C=15:GOSUB 9800 7520 A$=INKEY$:IF A$="" THEN 7520 7530 LINE (104+E*4,Y+10)-(104+E*4,Y+14),4:PSET (104+E*4,Y+12),15 7540 IF A$=" " THEN E(K)=E:GOTO 7600 ELSE IF A$=CHR$(28) THEN II=1 ELSE IF A$=CHR$(29) THEN II=-1 ELSE 7600 7550 E=E+II:IF E<0 THEN E=0 ELSE IF E>OP(K) THEN E=OP(K) 7560 GOTO 7510 7600 E=E(K):IF K>4 AND E>0 THEN C=6 ELSE C=1 7610 GOSUB 9800:ON KEY GOSUB 2000,2010,8000,8100,8200,8300,8400,8500,8600:RETURN 8000 K=0:GOSUB 7500:IN=E+1:P1=P1(IN):P2=P2(IN):H=HR(IN):NS=NS(IN):RETURN 8100 K=1:GOSUB 7500:RT=E+1:RETURN 8200 K=2:GOSUB 7500:ON INTERVAL=22-EGOSUB 1000:RETURN 8300 K=3:GOSUB 7500:VI=E:RETURN 8400 K=4:GOSUB 7500:KF=AF(E):RETURN 8500 K=5:GOSUB 7500:ON E+1 GOTO 8510,8520,8530,8540,8560,8570,8580,8590 8510 ST=1:RETURN 8520 NT=0:ST=3:CO=0:RETURN 8530 NT=0:ST=3:CO=-1:RETURN 8540 ST=4:NB(RT)=16:RETURN 8560 ST=4:NB(RT)=12:RETURN 8570 A$="o...o...o...o...":GOSUB 9700:GOTO 9500 8580 CN=0:ST=2:RETURN 8590 A$="o...o...o...o...":GOSUB 9700:MR=-1:CN=1:ST=1:RETURN 8600 K=6:GOSUB 7500:ON E+1 GOSUB 8610,8620,8650 8610 RETURN 8620 A$="GRAVANDO...":GOSUB 9700:CLOSE #1:OPEN "CAS:" FOR OUTPUT AS #1 8625 FOR I=1 TO 16:PRINT#1,NB(I):FOR K=1 TO 16:PRINT#1,RT(K,I):NEXT K,I:PRINT#1,CN:FOR I=0 TO CN:PRINT#1,NT(I):NEXT I:CLOSE #1:OPEN "GRP:" FOR OUTPUTAS #1 8630 A$="OK.":GOSUB 9700:RETURN 8650 A$="LENDO...":GOSUB 9700:CLOSE #1:OPEN "CAS:" FOR INPUT AS #1 8655 FOR I=1 TO 16:INPUT#1,NB(I):FOR K=1 TO 16:INPUT#1,RT(K,I):NEXT K,I:INPUT#1,CN:FOR I=0 TO CN:INPUT#1,NT(I):NEXT I:CLOSE #1:OPEN "GRP:" FOR OUTPUTAS #1 8660 A$="OK.":GOSUB 9700:RETURN 8700 RETURN 9000 IF A$=" " THEN R=0 ELSE IF A$=CHR$(28) THEN R=NT(CN) ELSE IF A$=CHR$(13) THEN MR=0:CN=CN-1:A$=STRING$(16,32):GOSUB 9700::GOTO 380 ELSE 380 9010 NT=R:NT(CN)=R:CN=CN+1 9020 PUT SPRITE 0,(30+6*((CN-1) MOD 16),7),1,0 9030 IF R=0 THEN 300 ELSE 420 9500 ST=1:T=0:NB(RT)=0 9510 A$=INKEY$:IF A$="" THEN 9510 9520 I=INSTR(N2$,A$):IF I>0 THEN RT(T+1,RT)=I-1:GOSUB 1010:GOTO 9555 9550 IF A$=CHR$(28) THEN GOSUB 1010 ELSE A$=STRING$(16," "):GOSUB 9700:RETURN 9555 NB(RT)=T 9560 IF T>15 THEN T=0 9570 PUT SPRITE 0,(30+6*(T MOD 16),7),1,0 9580 GOTO 9510 9700 LINE (232,12)-(24,4),5,BF:X=28:Y=5:COLOR1:GOTO 11490 9800 LINE (104,Y)-(222,Y+8),C,BF:IF C=1 THEN COLOR 15 ELSE COLOR 1 9810 A$=OP$(K,E):GOSUB 11490:LINE (104+E*4,Y+10)-(104+E*4,Y+14),15:RETURN 10000 COLOR15,4,1:SCREEN 2,0,0:OPEN "GRP:" AS #1:SPRITE$(0)=STRING$(3,&HE0) 10010 COLOR 15 10020 LINE (232,16)-(24,136),,B 10030 FOR N=24 TO 120 STEP 16:PRESET (32,N):PRINT#1,"F":PRESET (38,N):PRINT#1,CHR$(51+(N-24)/16):NEXT N 10040 RESTORE 7000:FOR N=0 TO 6:READ OX(N),OY(N),OP(N),NO$(N):FOR K=0 TO OP(N):READ OP$(N,K):NEXT K:NEXT N 10050 FOR I=0 TO 6:X=OX(I):Y=OY(I):K=OP(I):A$=NO$(I):GOSUB 11480:X=108:IF I>1 AND I<5 THEN E=7 ELSE E=0 10060 K=I:E(I)=E:GOSUB 7600:NEXT I 10070 VI=7:FR=14 10210 COLOR 15 10220 LINE (44,20)-(30,132),,B:FOR N=36 TO 116 STEP 16:LINE (30,N)-(44,N):NEXT N 10300 FOR N=0 TO 15:SX(N)=202+(N\4)*8:NEXT N 10620 X=18:Y=146:A$="oitava":GOSUB 11490 10630 X=66:A$="F1":GOSUB 11490 10640 LINE (78,144)-(64,154),,B 10650 PSET (62,152) 10660 LINE -(58,148) 10670 LINE -(62,144) 10680 LINE -(62,152) 10690 FOR N=0 TO 4:PSET (88+N*16,146),POINT STEP (0,0):PRINT#1,CHR$(N+49):NEXT N 10700 X=170:A$="F2":GOSUB 11490 10710 LINE (182,144)-(168,154),,B 10720 PSET (184,144) 10730 LINE -(184,152) 10740 LINE -(188,148) 10750 LINE -(184,144) 10760 LINE (54,144)-(16,154),,B 10770 LINE (12,140)-(190,158),,B 10780 X=201:Y=144:A$="ritmo":GOSUB 11490 10790 LINE (198,142)-(231,152),,B 10800 COLOR 1 10810 FOR N=202TO226STEP8:LINE (N,154)-(N+2,156),,B:NEXT N 10820 COLOR 15 10830 LINE (238,142)-(246,156),,B 10840 LINE (195,158)-(248,140),,B 10850 PSET (244,144) 10860 LINE -(244,144) 10870 PSET (244,144) 10880 LINE -(244,152) 10890 LINE -(240,152) 10900 LINE -(242,150) 10910 PSET (242,154) 10920 LINE -(240,152) 10930 COLOR 1 10940 LINE (116,144)-(128,154),,B 10950 'COLOR 5 10960 LINE (24,160)-(104,180),,B 10970 LINE (100,160)-(92,170),,B 10980 LINE (84,170)-(92,160),,B 10990 LINE (75,170)-(68,160),,B 11000 LINE (68,160)-(60,170),,B 11010 LINE (60,170)-(52,160),,B 11020 LINE (44,160)-(36,170),,B 11030 LINE (36,170)-(28,160),,B 11040 PSET (30,161),POINT STEP (0,0):PRINT#1,"SD GHJ L~" 11050 FOR N=32 TO 96 STEP 8:LINE (N,170)-(N,180):NEXT N 11060 PSET (26,172),POINT STEP (0,0):PRINT#1,"ZXCVBNM,./" 11420 PSET (146,170),POINT STEP (0,0):PRINT#1,"Gradiente":LINE (142,168)-(218,178),,B 11465 RETURN 11480 LINE (50,Y-2)-(94,Y+10),,B:LINE (103,Y-1)-(223,Y+9),15,B:LINE (104,Y)-(222,Y+8),1,BF:FOR N=1 TO K+1:PSET(100+N*4,Y+12),15:NEXT N 11490 FOR N=0 TO LEN(A$)-1:PSET(X+N*6,Y),POINT STEP (0,0):PRINT#1,MID$(A$,N+1,1):NEXT N:RETURN 50000 RUN 50010 RUN 60000 B=50:COLOR,1,1:OPEN"grp:"FOROUTPUTAS#1 60001 SCREEN2:W=128 60002 J=44:FORI=WTOW-12STEP-3:CIRCLE(I,B),J,15,,,1.1:J=J-6:NEXT:CIRCLE(W-16,B),15,15,,,1.1 60003 LINE(W-4,B-8)-(W-4,B+4),0:LINE(W-2,B)-(W-2,B+4),0:LINE(W+3,B-7)-(W+3,B+4),0:LINE(W+5,B-8)-(W+5,B-2),0:LINE(W+6,B-7)-(W+7,B-1),0 60004 LINE(W-5,B-8)-(W+4,B-8),15:LINE(W+4,B-11)-(W+5,B-8),15:LINE(W-12,B)-(W+6,B),15:LINE(W-12,B)-(W-12,B+4),15:LINE(W-12,B+4)-(W-4,B+4),15:LINE(W+6,B)-(W+6,B+5),15 60005 PAINT(W-3,B-9),15:PAINT(W-1,B+5),15:PAINT(W-1,B-42),15:PAINT(W-7,B-27),15 60006 COLOR7:PRESET(105,115):PRINT#1,"TOQUE!":LINE(105,124)-(148,125),,BF:COLOR15 60007 PRESET(45,142):PRINT#1,"Gradiente Inform tica":PRESET(53,155):PRINT#1,"produzido pelo CEBI" 60008 PRESET(22,168):PRINT#1,"Autor: Jos‚ Maur¡cio Bussab":RETURN 61000 SCREEN 0,0,15:PRINT TAB(15);"TOQUE!":PRINTTAB(15);"======" 61010 PRINT:PRINT:PRINT:PRINT" TOQUE! faz seu EX"; 61012 PRINT"PERT funcionar como um ¢rg„o eletr“nico program vel." 61014 PRINT:PRINT" Com ele vocˆ pode tocar melodias":PRINT"acompanhado de um ritmo, criar at‚ "; 61016 PRINT"16 ritmos pr¢prios, compor e memorizar":PRINT"uma melodia.":PRINT:PRINT" TOQUE! tem 8 instrumentos diferentes (piano, clarineta, banjo, etc) e 5 oi- tavas" 61018 PRINT:PRINT:PRINT:PRINT" Pressione qualquer tecla e TOQUE!" 61020 IF INKEY$<>"" THEN RETURN ELSE 61020 61100 GOTO 61100 65000 RUN |