20 DIMchord%(2,2),env%(3,2),pit%(2),title$(19) 50 RESTORE 60 PROCread 70 REPEAT 80 MODE7 90 PROCinput 100 MODE4 110 PROCvdu 120 FORnumber=0 TO repeat 130 PROCfirst 140 PROCscore 150 FORchar=1TOLEN(pit$) 160 PROCdata 170 PROCtoscore 180 PROCchoosechord 190 PROCplay 200 NEXT 210 pause=GET 220 NEXT 230 UNTILFALSE 240 END 260 : 270 DEFPROCread 280 FORC=0TO19 290 READtitle$(C) 300 NEXT 310 FORC=0TO2 320 FORK=0TO2 330 READchord%(C,K) 340 NEXT, 360 FORC=0TO3 370 FORK=0TO2 380 READenv%(C,K) 390 NEXT, 410 ENDPROC 420 : 430 DEFPROCinput 440 totrep=0 450 PRINTTAB(4,2)"CHOICE (1 to 20)? :" 460 FORC=0TO19 470 PRINTTAB(2,4+C);CHR$(129+(C MOD 7));title$(C); 480 NEXT 490 REPEAT:PRINTTAB(25,2)SPC(15);:INPUTTAB(25,2)choice:UNTILchoice>0 ANDchoice<=20 ANDchoice=INT(choice) 500 IFchoice=20 totrep=-1:choice=0:repeat=18:ENDPROC 510 CLS 520 PRINTTAB(2,3)"WHAT IS THE SPEED (1 - 10)?" 530 PRINTTAB(2,8)"No. OF REPEATS?" 540 PRINTTAB(2,13)"PITCH (0 - 12)?" 550 PRINTTAB(2,18)"ENVELOPE (0 TO 3)?" 560 REPEAT:PRINTTAB(4,4)SPC(15);:INPUTTAB(4,4) speed:UNTILspeed>0ANDspeed<11ANDspeed=INT(speed) 570 REPEAT:PRINTTAB(4,9)SPC(15);:INPUTTAB(4,9)repeat:UNTILrepeat>=0ANDrepeat=INT(repeat) 580 REPEAT:PRINTTAB(4,14)SPC(15);:INPUTTAB(4,14) pitch:UNTILpitch>=0ANDpitch<=12ANDpitch=INT(pitch) 590 REPEAT:PRINTTAB(4,19)SPC(15);:INPUTTAB(4,19) envel:UNTILenvel>=0ANDenvel<=3ANDenvel=INT(envel) 600 pitch=pitch*4:speed=(speed+4)/10 610 ENDPROC 620 : 630 DEFPROCdata 640 char$=MID$(pit$,char,1) 650 posit=INSTR("drmfsltDRMFSLTa",char$) 660 pit%(0)=VAL(MID$("033041049053061069077081089097101109117125129",(posit-1)*3+1,3)) 670 pitpos=160-posit*8 680 char$=MID$(dur$,char,1) 690 posit=INSTR(" qQcCmMs",char$) 700 dur=VAL(MID$("0004060812162432",(posit-1)*2+1,2)) 710 notdur=(posit-1)*2-1 720 ENDPROC 730 : 740 DEFPROCfirst 750 IFtotrep PROCtotrep:choice=choice+1 760 RESTORE(2380+30*(choice-1)) 770 across=1:down=4:sub=0:PROCenv 780 transA0=0:transA1=0:transA2=0:transA3=0 790 transB0=0:transB1=0:transB2=0:transB3=0 800 READbar,count,top,bottom,scansion,pit$,dur$ 810 pit$=pit$+" " 820 dur$=dur$+" " 830 ENDPROC 840 : 850 DEFPROCplay 860 IFcount=0 sub=-1:PROCenv 870 FORC=0TO2 880 SOUND(&201+C),env%(envel,C),pit%(C)+pitch,dur/speed:PROCLIGHTS 890 NEXT 900 SOUND1,0,0,0 910 IFcount=0 sub=0:PROCenv 920 ENDPROC 921 DEFPROCLIGHTS 923 X=INT(RND(256)):?&FD00=X 925 ENDPROC 930 DEFPROCchoosechord 940 FORC=0TO2 950 FORK=0TO2 960 IFpit%(0)=chord%(C,K) OR pit%(0)=chord%(C,K)+48 OR pit%(0)=chord%(C,K)+96 pit%(1)=chord%(C,(K+1)MOD3):pit%(2)=chord%(C,(K+2)MOD3):C=2:K=2 970 NEXT, 990 ENDPROC 1010 : 1020 DEFPROCenv 1030 ENVELOPE1,1,0,0,0,0,0,0,126,-4,-1,-1,110-sub*16,90-sub*10 1040 ENVELOPE2,1,0,0,0,0,0,0,126,-4,-1,-1,90-sub*10,50-sub*10 1050 ENVELOPE3,1,0,0,0,0,0,0,60,10,0,-100,50-sub*10,110-sub*10 1060 ENVELOPE4,1,0,0,0,0,0,0,60,10,0,-100,24-sub*8,50-sub*10 1070 ENDPROC 1080 : 1090 DEFPROCtoscore 1100 transA0=transA1:transA1=transA2:transA2=transA3:transA3=pitpos 1110 transB0=transB1:transB1=transB2:transB2=transB3:transB3=notdur 1120 addur=VAL(MID$("0004060812162432",transB0+2,2)) 1130 IFaddur=0 ENDPROC 1140 count=(count+addur) MOD bar 1150 pipos=transA0 1160 pipos=pipos-VAL(MID$("00080816162432324040484856",pitch/2+1,2)) 1170 nodur=transB0 1180 whether=(pipos>72 AND pipos<118)OR pipos<24 1190 IFpipos=72 MOVE156+scansion*across,224*down-72:PRINTCHR$(240) 1200 pipos=pipos-16*whether 1210 MOVE164+scansion*across,224*down-pipos 1220 PRINTCHR$(223+nodur-whether) 1230 across=across+1 1240 IFcount=0 PROCbar 1250 IFacross>1050/scansion down=down-1:across=0 1260 ENDPROC 1270 : 1280 DEFPROCvdu 1290 VDU23;8202;0;0;0; 1300 VDU19,0,4;0; 1320 VDU23,224,12,10,10,8,104,248,240,96 1330 VDU23,225,48,120,248,176,128,160,160,192 1340 VDU23,226,12,10,10,8,104,251,243,96 1350 VDU23,227,48,123,251,176,128,160,160,192 1360 VDU23,228,8,8,8,8,104,248,240,96 1370 VDU23,229,48,120,248,176,128,128,128,128 1380 VDU23,230,8,8,8,8,104,251,243,96 1390 VDU23,231,48,123,251,176,128,128,128,128 1400 VDU23,232,8,8,8,8,104,152,144,96 1410 VDU23,233,48,72,200,176,128,128,128,128 1420 VDU23,234,8,8,8,8,104,155,147,96 1430 VDU23,235,48,75,203,176,128,128,128,128 1440 VDU23,236,0,0,0,0,112,136,136,112 1450 VDU23,237,112,136,136,112,0,0,0,0 1460 VDU23,238,10,31,10,10,10,10,31,10 1470 VDU23,239,16,16,16,22,25,17,18,12 1480 VDU23,240,0,0,0,0,0,0,255,0 1490 VDU23,241,4,10,10,10,12,12,8,24 1500 VDU23,242,24,40,40,40,72,72,72,72 1510 VDU23,243,136,142,153,153,153,137,137,74 1520 VDU23,244,60,8,8,8,8,8,8,8 1530 VDU23,245,252,130,130,1,1,1,1,1 1540 VDU23,246,1,2,2,4,4,8,48,192 1550 ENDPROC 1560 : 1570 DEFPROCscore 1580 CLG 1590 VDU4 1600 PRINTTAB(5,1);title$(choice-1); 1610 VDU5 1620 FORscore=896 TO 224 STEP-224 1630 FORline=16TO176 STEP16 1640 IFline=96 NEXT 1650 MOVE0,score-line 1660 DRAW1279,score-line 1670 NEXT 1680 PROCclef 1690 PROCsig 1700 NEXT 1710 FORscore=880TO-16STEP-224 1720 MOVE4,score:DRAW4,score-160 1730 NEXT 1740 FORscore=0TO96STEP96 1750 MOVE164,880-score:PRINTSTR$(top) 1760 MOVE164,848-score:PRINTSTR$(bottom) 1770 NEXT 1780 ENDPROC 1790 : 1800 DEFPROCclef 1810 MOVE12,score+16:VDU241,8,10,242,8,10,243,8,10,244 1820 MOVE12,score-116:VDU245,8,10,246 1830 PLOT69,48,score-118 1840 PLOT69,48,score-134 1850 ENDPROC 1860 : 1870 DEFPROCbar 1880 IFacross=0 ENDPROC 1890 MOVE176+scansion*across,224*down-16 1900 DRAW176+scansion*across,224*down-176 1910 across=across+1 1920 ENDPROC 1930 DEFPROCsig 1940 key=VAL(MID$("1432505234161",pitch/4+1,1)) 1950 flat=VAL(MID$("00-100-100-1-100-100-10000",pitch/2+1,2)) 1960 IFkey=0 ENDPROC 1970 FORkeys=1TOkey 1980 po=VAL(MID$("00282404-83616124044082016",4*(keys-1)-2*flat+1,2)) 2000 MOVE48+16*(keys-1),score-po 2010 PRINTCHR$(238-flat) 2020 MOVE48+16*(keys-1),score-po-112 2030 PRINTCHR$(238-flat) 2040 NEXT 2050 ENDPROC 2060 : 2070 DEFPROCtotrep 2080 pitch=(RND(13)-1)*4 2090 envel=RND(4)-1 2100 speed=(RND(4)-1)/10+0.8 2110 ENDPROC 2120 : 2130 DATA"1. Good King Wenceslas" 2140 DATA"2. As with gladness men of old" 2150 DATA"3. Hark the Herald Angels" 2160 DATA"4. O little town of Bethlehem" 2170 DATA"5. In the bleak Mid-winter" 2180 DATA"6. O come all ye faithful" 2190 DATA"7. It came upon a mid-night clear" 2200 DATA"8. While shepherds watch" 2210 DATA"9. Silent Night" 2220 DATA"10.Away in a manger" 2230 DATA"11.We wish you a Merry Christmas" 2240 DATA"12.I saw three ships" 2250 DATA"13.The First Noel" 2260 DATA"14.We Three Kings" 2270 DATA"15.God Rest Ye Merry, Gentlemen" 2280 DATA"16.Angels from the Realms of Glory" 2290 DATA"17.Once in Royal Davids City" 2300 DATA"18.See, Amid the Winter's Snow" 2310 DATA"19.The Holly and the Ivy" 2320 DATA"20.Run through total repertoire" 2330 : 2340 DATA33,49,61,53,69,81,61,77,89 2350 : 2360 DATA1,4,4,3,1,1,1,2,2,3,4,4 2370 : 2380 DATA32,0,4,4,60 2390 DATA"DDDRDDslsltDDDDDRDDslsltDDSFMRMRDlsltDDssltDDRSFMRDFD" 2400 DATA"ccccccmccccmmccccccmccccmmccccccmccccmmccccccmccccmms" 2410 DATA32,0,4,4,76 2420 DATA"DtDRDFFMltDlsssDtDRDFFMltDlsssMRDMSFMltDFMRD" 2430 DATA"cqqccccmccccccmcqqccccmccccccmccccCqmccccccm" 2440 DATA32,0,4,4,44 2450 DATA"sDDtDMMRSSSFMRMsDDtDMMRSRRttlsSSSDFMMRSSSDFMMRLLLSFMFRMFSDDRMLLLSFMFRMFSDDRD" 2460 DATA"ccCqccccccCqccmccCqccccccCqccmccccccccccccccccccccccmcqqCqccmCqccccmcqqCqccm" 2470 DATA32,24,4,4,48 2480 DATA"sDDDRMRMFSMFMDRRDsDDDRMRMFSMFMDRRDDMSLSFMRDRMFSsDMRDssDDDRMRMFSMFMDRRD" 2490 DATA"cccccqqqqcccqqccMcccccqqqqcccqqccMqqCqqqqqqqqqccccccmmccccqqqqcccqqCCM" 2500 DATA32,0,4,4,72 2510 DATA"MFSMRDRMRlRMFSMRDRMRDDFMFSLLMSMRDtMFSMRDRMRDD" 2520 DATA"CqccmmCqccsCqccmmccCqsCqccccmccccsCqccmmccCqs" 2530 DATA32,24,4,4,52 2540 DATA"DDsDRsMRMFMRDDtltDRMtlssSFMFMRMDRtsDDtDRDsMMRMFMRMFMRDtDFMRDD" 2550 DATA"cmccmmccccmccmccccccmCqsmccmmccccmccccccmccccccmccccccmccmCqs" 2560 DATA32,24,4,4,52 2570 DATA"DRMRDRMFMRSSMFSLSMFSSMDFMRDRMFSMRDDtltRDtlMRDtlssSFMRMFMRDRMFSMRD" 2580 DATA"qqcccqqccccccqqcMqqcccccccqqqqcccMcccccCqccccccMccccqqcccqqqqcccM" 2590 DATA32,24,4,4,58 2600 DATA"DMMRDFFMRMSSMSMLSFMRDtMRDDtDDMMRDFFMRMSSMSMLSFMRDtMRDDtD" 2610 DATA"cCqccccccccccMcCqccccccccccMcCqccccccccccMcCqccccccccccM" 2620 DATA24,0,6,8,60 2630 DATA"slsmslsmRRtDDsllDtlslsmllDtlslsmRRFRtDMDsmsfrd" 2640 DATA"CqcMCqcMmcMmcMmcCqcCqcMmcCqcCqcMmccccMMcccCqcM" 2650 DATA24,16,3,4,61 2660 DATA"sDDRMDDMFSSLFRMFFSMMDMRlDtsDDRMDDMFSSLFRMFFSMMDMRltD" 2670 DATA"cccqqccqqcccmqqcccccqqcccmcccqqccqqcccmqqcccccqqcccm" 2680 DATA24,16,6,8,60 2690 DATA"sDDRDtlllRRMRDtsssMMFMRDlsslRtDsDDDttDtlsRMRRDDSssslRtD" 2700 DATA"ccqqqqccccqqqqccqqcqqqqccqqcccmccccmccccmccqqqqccqqcccm" 2710 DATA24,20,6,8,104 2720 DATA"sDDRMSMRFMDDMRtssDDRMSMRFMDDRMRD" 2730 DATA"qcqcqcqcqcqcqcqcqcqcqcqcqcqqqqCC" 2740 DATA24,16,3,4,44 2750 DATA"MRDRMFSLTaTLSLTaTLSLTaSFMMRDRMFSLTaTLSLTaTLSLTaSFMMRDRMFSaTLLSaTLSLTaSFM" 2760 DATA"qqCqqqmqqcccmqqcccccccccmqqCqqqmqqcccmqqcccccccccmqqCqqqmqqmcMcccccccccM" 2770 DATA24,0,3,4,54 2780 DATA"MRDltDtlMRDltDtlDDRRMMSFMRMRDtltRDDDsDlDDDDsDlDDDRMFMRMDDDsDlD" 2790 DATA"cqcqqqqCcqcqqqqCcqcqcqqqqqqqcqCcqcqcqcqCcqcqcqCcqcqcqcqcqcqcqC" 2800 DATA32,24,4,4,48 2810 DATA"llMMRDtlsltDRMllMMRDtlsltDRMMFRMFSLMRDltDRDRMFMMRDtlDtlRDRMFSLMRDtl" 2820 DATA"cccccccccccccMcccccccccccccMcccccccccccccmccmccccccmqqcmccccccccccM" 2830 DATA32,0,4,4,40 2840 DATA"MMMMSSFMDMMRMMSSFMMMMMSSFMDMMRMMSSFMSLSFMFSFMRMFMRDRsDRMFMRSLSFMFSFMRMFMRDRsDRMFMRD" 2850 DATA"cccqqCqcccqqcqqCqmcccqqCqcccqqcqqCqmmqqqqmqqqqmqqqqmmqqqqmmmqqqqmqqqqmqqqqmmccccmms" 2860 DATA32,0,4,4,64 2870 DATA"stDDDtDRRDDMSMMRDtDstDDDtDRRDDMSMMRDtDLLSDFFMLLSMMRDtD" 2880 DATA"ccCqqqqqccccCqqqqqmccCqqqqqccccCqqqqqmccCqccmccCqqqqqm" 2890 DATA32,0,4,4,56 2900 DATA"DRDtlssDRFMMRRDRDtlssDRMFRDDSSFMRDtSSFMRDtDRDtlssSMDFMRD" 2910 DATA"CqccCqmccccCqmCqccCqmccccCqmCqccccmCqccccmCqccCqmCqccccm" 2920 DATA32,0,4,4,56 2930 DATA"DDDDLSMDDDDLSSFMRDMMllsDRMFMRDDDDDLSMDDDDLSSFMRDMMllsDRMFMRD" 2940 DATA"cqqcccCqqqccmqqqqcqqqqcqqqqccmcqqcccCqqqccmqqqqcqqqqcqqqqccm"