10 '------------------------------
20 '          CPC MUSIC
30 '------------------------------
40 DIM d(300)
50 CLS
60 BORDER 1
70 INK 0,0:INK 1,1:PAPER 1: INK 2,9:PEN 2
80 CLS
90 PRINT"             CPC MUSIC      "
100 WINDOW 8,32,5,21
110 PAPER 0
120 CLS
130 PRINT:PRINT:PRINT:PRINT:PRINT:PRINT:PRINT:PRINT:PRINT:PRINT:PRINT:PRINT:PRINT:PRINT:PRINT:PRINT
140 PRINT
150 PRINT"  CPC MUSIC "
160 PRINT
170 GOSUB 1610
180 PRINT "  UN PROGRAMME"
190 GOSUB 1610
200 PRINT
210 PRINT "  POUR AMSTRAD CPC464"
220 GOSUB 1610
230 PRINT
240 PRINT "  ECRIT PAR"
250 PRINT
260 GOSUB 1610
270 PRINT "  YVES L'HOMER"
280 PRINT
290 GOSUB 1610
300 PRINT "  TAPEZ UNE TOUCHE"
310 PRINT
320 GOSUB 1610
330 PRINT "  POUR COMMENCER "
340 PRINT
350 GOSUB 1610
360 GOSUB 1610
370 GOTO 140
380 MODE 1
390 BORDER 0
400 z=2
410 ws=0
420 INK 1,18:PEN 1
430 INK 0,2:PAPER 0
440 BORDER 1
450 '
460 '--- presentation ---
470
480 CLS
490 WINDOW #1,1,40,8,13
500 WINDOW #3,1,40,22,25
510 CLS#1
520 CLS#3
530 '
540 '--- composition ---
550 '
560 PRINT"             CPC MUSIC      "
570 PAPER #1,1
580 PEN #1,2
590 PEN #3,2
600 PAPER #3,1
610 PRINT #3,"    tapez enter pour valider            "
620 REM PRINT #1,"                                         "
630 LOCATE 5,10:INPUT#1," entrez le nombre de notes que vous     voulez entendre jouer par l'amstrad     puis tapez enter (nombre maximum 44)";nn
640 PRINT #1,""
650 PRINT #1," tapez <1> puis <enter> pour avoir un do,<2>..re,<3>..mi,<4>..fa,<5>..sol,<6>..la,<7>..si,<8>..do,<9>..re, <10>..mi,<11>..fa"
660 FOR i=1 TO nn
670 INPUT #1,"note ",d(i)
680 IF d(i)>11 OR d(i)<1 THEN GOTO 670
690 IF d(i)=1 THEN PRINT #1, " do"
700 IF d(i)=2 THEN PRINT #1, " re"
710 IF d(i)=3 THEN PRINT #1, " mi"
720 IF d(i)=4 THEN PRINT #1, " fa"
730 IF d(i)=5 THEN PRINT #1," sol"
740 IF d(i)=6 THEN PRINT #1," la"
750 IF d(i)=7 THEN PRINT #1," si"
760 IF d(i)=8 THEN PRINT #1," do+"
770 IF d(i)=9 THEN PRINT #1," re+"
780 IF d(i)=10 THEN PRINT #1," mi+"
790 IF d(i)=11 THEN PRINT #1," fa+"
800 NEXT
810 GOSUB 1550
820 CLS
830 v=7
840 GOSUB 1460
850 FOR i=1 TO nn
860 IF d(i)=1 THEN f=261.626
870 IF d(i)=2 THEN f=293.665
880 IF d(i)=3 THEN f=329.628
890 IF d(i)=4 THEN f=349.228
900 IF d(i)=5 THEN f=391.995
910 IF d(i)=6 THEN f=440
920 IF d(i)=7 THEN f=493.883
930 IF d(i)=9 THEN f=587.33
940 IF d(i)=8 THEN f=523.251
950 IF d(i)=10 THEN f=659.255
960 IF d(i)=11 THEN f=698.457
970 GOSUB 1140
980 NEXT
990 PRINT
1000 INPUT #3,"      voulez vous rejouer le morceau <1>      creer un autre morceau         <2>      changer le tempo du morceau    <3>",ws
1010 IF ws<1 OR wf>2 THEN GOTO 1000
1020 REM PAPER 0:PEN 1
1030 REM BORDER 0
1040 IF ws=2 GOTO 60
1050 IF ws=3 THEN GOSUB 1550
1060 IF ws=1 OR ws=3 THEN z=2
1070 IF ws=1 OR Ws=3 THEN CLS
1080 IF ws=1 OR ws=3 GOTO 840
1090 END
1100 '
1110 '--- execution du morceau ---
1120 '
1130 MODE 1
1140 k=236
1150 SOUND 1,f,d,v
1160 SOUND 1,1,20,1
1170 REM INK 2,13
1180 REM INK 3,0 :PEN 3
1190 IF d(i)=1 THEN hh=7
1200 IF d(i)=2 THEN hh=6
1210 IF d(i)=3 THEN hh=5
1220 IF d(i)=4 THEN hh=4
1230 IF d(i)=5 THEN hh=3
1240 IF d(i)=6 THEN hh=2
1250 IF d(i)=7 THEN hh=1
1260 IF d(i)=8 THEN hh=0
1270 IF d(i)=9 THEN hh=-1
1280 IF d(i)=10 THEN hh=-2
1290 IF d(i)=11 THEN hh=-3
1300 IF i=9 THEN Z=2
1310 IF i=9 THEN CLS
1320 IF i=18 THEN z=2:IF i=18 THEN CLS
1330 IF i=27 OR i=36 THEN z=2:IF i=27 OR i=36 THEN CLS
1340 IF i=9 OR i=18 THEN GOSUB 1460
1350 IF i=27 OR i=36 THEN GOSUB 1460
1360 IF i=45 OR i=54 THEN GOSUB 1460
1370 IF i=45 OR i=54 THEN CLS
1380 z=z+4
1390 hh=hh+5
1400 INK 0,13:PAPER 0
1410 INK 2,0:PEN 2
1420 LOCATE z,hh:PRINT CHR$(k)
1430 RETURN
1440 '
1450 '--- porte ---
1460 '
1470 PLOT 3,228:DRAW 3,355
1480 PLOT 6,228:DRAW 6,355
1490 PLOT 0,228:DRAW 640,228:PLOT 0,260:DRAW 640,260:PLOT 0,292:DRAW 640,292
1500 PLOT 0,324:DRAW 640,324:PLOT 0,356:DRAW 640,356
1510 RETURN
1520 '
1530 '--- tempo ---
1540 '
1550 INPUT #1,"voulez vous un tempo lent   <1>                     un tempo moyen  <2>                     un tempo rapide <3> ";te
1560 IF te<1 OR te>3 GOTO 1550
1570 IF te=2 THEN d=25
1580 IF te=3 THEN d=12
1590 IF te=1 THEN d=50
1600 RETURN
1610 FOR t=1 TO 40: CALL &BD19:NEXT
1620 GOSUB 1640
1630 RETURN
1640 bb$=INKEY$:IF bb$="" THEN RETURN ELSE GOTO 380