Generatore di musica – MSX – Basic

Rivista: MSX Magazine – Anno: 1985 – Numero 1 – Trascrizione: Francesco Fiorentini

Giusto per ribadire le capacita’ del Basic delle macchine MSX, dopo il gioco lampioni, e’ il momento di un simpatico generatore di musica, anche questo scritto in MSX Basic e anche questo pubblicato sulla rivista spagnola MSX Magazine numero 1.

Uno degli aspetti più affascinanti dei computer MSX è la loro innata capacità di generare suoni e ritmi, permettendo di comporre musica con una facilità che pochi altri computer dell’epoca potevano offrire senza l’ausilio di software o hardware aggiuntivo. In questo senso, l’MSX è già pronto per “dare la nota” – sta a te imparare a suonarlo con il ritmo e il volume che preferisci.
All’inizio potrebbe sembrare difficile, ma è normale: suonare il piano è una cosa, suonare l’MSX è un’altra! Ma con un po’ di pratica, diventerai un vero compositore digitale.
Quando esegui il programma, sullo schermo apparirà una tastiera d’organo virtuale con diversi tasti da utilizzare. Avrai a disposizione 9 tasti funzione per controllare i tre canali audio, il tono, il volume e per ritornare al BASIC.
Per comporre la tua melodia, dovrai inserire le note in uno dei tre canali disponibili. La selezione del canale avviene premendo uno dei tasti funzione (F1, F2 o F3), mentre per inserire una nota ti basterà posizionare il cursore sopra il tasto desiderato della tastiera virtuale e premere la barra spaziatrice.
La melodia che hai creato continuerà a suonare in loop fino a quando non premerai il tasto F4. Il volume di ciascun canale può essere regolato individualmente utilizzando i rispettivi tasti funzione, dandoti il controllo completo sul mix finale.
Tutte le istruzioni dettagliate sono già integrate nel programma stesso, che guida l’utente passo dopo passo in questa esperienza creativa. Non devi far altro che accendere il tuo MSX, caricare il codice e dare sfogo alla tua vena musicale!

Se sei un appassionato di retrò, di chip-tune o semplicemente curioso di scoprire come si componeva musica negli anni ’80, questo generatore musicale in BASIC è un piccolo gioiello da provare. Buona composizione!

Il listato e’ stato estratto dalla rivista spagnola MSX Magazine – Anno: 1985 – Numero 1, edizioni PUBLINFORMATICA. Link diretto alla rivista su archive.org: https://archive.org/details/msxmagazine06_201412/msx_magazine-01

Titolo: Generatore di musica
Piattaforma: MSX1
Linguaggio: Basic
Versione originale: 1985
Pubblicazione: MSX Magazine
Anno: 1985
Trascrizione: Francesco Fiorentini
Anno: 2026
Download: N/A
Note: Il testo all’interno del gioco e’ stato tradotto in Italiano.

Istruzioni
Per comporre la tua melodia, dovrai inserire le note in uno dei tre canali disponibili. La selezione del canale avviene premendo uno dei tasti funzione (F1, F2 o F3), mentre per inserire una nota ti basterà posizionare il cursore sopra il tasto desiderato della tastiera virtuale e premere la barra spaziatrice.

Qui di seguito trovate il codice da copiare sul vostro MSX oppure su un emulatore, noi suggeriamo BlueMSX.

Vi suggeriamo di creare un dischetto con MSX Disk-Manager (http://www.lexlechz.at) e di copiare il listato all’interno di esso per poi caricare il file nell’emulatore. Se avete problemi, contattateci!

Attenzione – Ci siamo resi conto che nel listato i caratteri ‘>’ e ‘<‘ potrebbero venir sostituiti dai rispettivi encoding html ‘&gt’ e ‘&lt’. Nel caso, sostituite questi valori nel listato prima di copiarlo sull’emulatore.

Listato: Generatore di musica – MSX – Basic


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
10 STOP ON: ON STOP GOSUB 1160
20 L=24: IC=1:D1=1:D2=1:D3=1:KF=0:KS=1
30 V1=5: V2=5: V3=5: C1=92:C2=92:C3=92
40 GOSUB 1190
50 SCREEN 2,0,0
60 DIM AP(16),BP(16),CP(16)
70 DIM PLOT(8,2),MT(30)
80 FOR I=0 TO 29
90 READ A: MT(I)=A
100 NEXT I
110 DATA 24,26,28,28,31,33,35,36,38,40,41,43,45,47,48,50,52,53,55,57,59,60,62,64,65,67,69,71,72,74
120 COLOR 15,4,4:CLS
130 LINE(8,120)-(248,176),15,BF
140 LINE(4,116)-(252,178),15,B
150 FOR I=16 TO 240 STEP 8
160 LINE(I,120)-(I,176),4
170 NEXT I
180 S=13:K=0
190 FOR I=1 TO 4
200 FOR J=1 TO 6
210 READ N: S=S+N
220 LINE (S,120)-(S+5, 156),1,BF
230 K=K+1
240 NEXT J
250 RESTORE 270
260 NEXT I
270 DATA 0,9,15,8,8,16
280 LINE (4,64)-(252,112),15,BF
290 LINE (210,68)-(242,108),1,B
300 LINE (216,72)-(216,104),1,B
310 LINE (226,72)-(226,104),1
320 LINE (236,72)-(236,104),1
330 FOR I=72 TO 192 STEP 8
340 FOR J=68 TO 100 STEP 16
350 LINE (I,J)-(I+8,J+8),1,B
360 NEXT J
370 NEXT I
380 FOR I=68 TO 100 STEP 16
390 LINE (20,I)-(40,I+8),8,B
400 NEXT I
410 RESTORE 470
420 FOR I=1 TO 8
430 FOR J=1 TO 2
440 READ N: PLOT(I,J)=N
450 NEXT J
460 NEXT I
470 DATA 0,-2,2,-2,2,0,2,2,0,2,-2,2,-2,0,-2,-2
480 FOR I=1 TO 8
490 S$=S$+CHR$(255)
500 NEXT I
510 SPRITE$(0)=S$: S$=""
520 RESTORE 570
530 FOR I=1 TO 8
540 READ A: S$=S$+CHR$(A)
550 NEXT I
560 SPRITE$(1)=S$
570 DATA 255,255,255,0,0,0,0,0
580 X=200: Y=170
590 PUT SPRITE 1,(212,C1),6,1
600 PUT SPRITE 2,(222,C2),6,1
610 PUT SPRITE 3,(232,C3),6,1
620 FOR I=1 TO 9: KEY(I) ON:NEXT I
630 ON KEY GOSUB 850,870,890,910,970,1010,1060,1110,1170
640 STRIG(0) ON: ON STRIG GOSUB 750
650 PUT SPRITE 0,(X,Y),6,0
660 IF STICK(0)=(0) THEN 650
670 X=X+PLOT(STICK(0),1)
680 Y=Y+PLOT(STICK(0),2)
690 IF X<8 THEN X=8
700 IF X>244 THEN X=244
710 IF Y<122 THEN Y=122
720 IF Y>174 THEN Y=174
730 IF KF=1 THEN GOTO 930
740 GOTO 650
750 IF POINT(X,Y)=15 THEN M=MT(INT((X-8)/8))
760 IF POINT(X,Y)=1 THEN M=MT(INT((X-13)/8))+1
770 PLAY "V=V1;L=L;N=M:"
780 IF AF>0 THEN AP(AF)=M: AF=AF+1: LINE (AF*8+58,70)-(AF*8+62,74),1,BF: LINE((AF-1)*8+58,70)-((AF-1)*8+62,74),15,BF
790 IF AF>16 THEN AF=0: LINE(194,70)-(198,74),15,BF: RETURN
800 IF BF>0 THEN BP(BF)=M: BF=BF+1: LINE (BF*8+58,86)-(BF*8+62,90),1,BF: LINE ((BF-1)*8+58,86)-((BF-1)*8+62,90),15,BF
810 IF BF>16 THEN BF=0: LINE(194,86)-(198,90),15,BF: RETURN
820 IF CF>0 THEN CP(CF)=M: CF=CF+1: LINE (CF*8+58,102)-(CF*8+62,106),1,BF: LINE ((CF-1)*8+58,102)-((CF-1)*8+62,106),15,BF
830 IF CF>16 THEN CF=0: LINE(194,102)-(198,106),15,BF: RETURN
840 RETURN
850 IF BF=1 OR CF=1 THEN RETURN
860 AF=1 : LINE (20,68)-(40,76),8,BF:RETURN
870 IF AF=1 OR CF=1 THEN RETURN
880 BF=1:LINE(20,84)-(40,92),8,BF:RETURN
890 IF AF=1 OR BF=1 THEN RETURN
900 CF=1 : LINE (20,100)-(40,108),8,BF: RETURN
910 SWAP KF,KS: RETURN
920 IF KF=0 THEN GOTO 730
930 FOR I=1 TO 16
940 PLAY "L=L;V=V1;N=AP(I);","L=L;V=V2;N=BP(I);","L=L;V=V3;N=CP(I);"
950 NEXT I
960 GOTO 920
970 L=L+IC
980 IF L>24 THEN L=24: IC=-1
990 IF L<1 THEN L=1: IC=1
1000 RETURN
1010 V1=V1+D1
1020 IF V1>15 THEN V1=15: D1=-D1
1030 IF V1<0 THEN V1=0: D1=-D1
1040 C1=C1-(D1*2): PUT SPRITE 1,(212,C1),6,1
1050 RETURN
1060 V2=V2+D2
1070 IF V2>15 THEN V2=15: D2=-D2
1080 IF V2<0 THEN V2=0: D2=-D2
1090 C2=C2-(D2*2): PUT SPRITE 2,(222,C2),6,1
1100 RETURN
1110 V3=V3+D3
1120 IF V3>15 THEN V3=15: D3=-D3
1130 IF V3<0 THEN V3=0: D3=-D3
1140 C3=C3-(D3*2): PUT SPRITE 3,(232,C3),6,1
1150 RETURN
1160 RETURN
1170 SCREEN 0,0:END
1180 SCREEN 0,0: KEY OFF
1190 COLOR 15,6:PRINT"GENERATORE DI MUSICA":PRINT"---------- -- ------"
1200 PRINT
1210 PRINT" Usa i tasti freccia per muovere il 'dito'.":PRINT
1220 PRINT" Per selezionare la nota, premi la barra spaziatrice."
1230 PRINT
1240 PRINT" I tasti funzione sono definiti come segue: ":PRINT
1250 PRINT" F1, F2 e F3 servono per fissare una serie di 16 note che verrà emessa dai canali 1, 2 e 3 rispettivamente."
1260 PRINT" F4- Inizio/Fine della Composizione"
1270 PRINT" F5- Aumento/Diminuzione del ritmo"
1280 LOCATE 0,24: PRINT "Premi un tasto per continuare";
1290 A$=INKEY$ : IF A$="" THEN 1290
1300 CLS
1310 PRINT"GENERATORE DI MUSICA"
1320 PRINT"---------- -- ------"
1330 PRINT
1340 PRINT"F6, F7 e F8, Aumentano o diminuiscono il volume dei canali 1, 2 e 3 rispettivamente."
1350 PRINT"F9- Uscita al BASIC."
1360 LOCATE 0,23: PRINT"Premi un tasto per eseguire.";
1370 A$=INKEY$: IF A$="" THEN 1370
1380 RETURN

Share

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

This site uses Akismet to reduce spam. Learn how your comment data is processed.