ON ERROR IF ERR=17 CHAIN @lib$+"../examples/tools/touchide" ELSE MODE 3 : PRINT REPORT$ : END REM. Demonstration of SOUND and ENVELOPE; Richard Russell 14-Jan-2002, 07-Jun-2010 CLS text$ = "Time for a cuppa!" OSCLI "FONT """+@lib$+"FreeSans"",18" size% = WIDTH(text$) VDU 5 : MOVE @vdu.tr%-size%/2,200 : PRINT text$; : VDU 4 *FONT *TEMPO 5 x% = @vdu.tr% - 281 y% = @vdu.tb% - 260 OSCLI "DISPLAY """+@dir$+"kettle.png"" "+STR$x%+","+STR$y% DIM scale%(8), acc%(8), sync%(3) scale%() = 0,52,60,68,72,80,88,96 sync%() = 0, &200, &200, &200 ENVELOPE 1,1,0,0,0,0,0,0,127,0,-2,-4,126,126 REPEAT READ T$ : IF T$="" REPEAT WAIT 1 : UNTIL FALSE acc%() = 0,0,0,0,0,0,0,-4 : REM. F major WHILE T$<>"" I% = 1 : WHILE INSTR("0123456789",MID$(T$,I%,1)) I% += 1 : ENDWHILE IF I% > 1 dur% = VALLEFT$(T$,I%-1) : T$ = MID$(T$,I%) C$ = LEFT$(T$,1) : T$=MID$(T$,2) CASE C$ OF WHEN "T": clef% = 48 WHEN "S": clef% = 0 WHEN "V": voice% = ASC(T$) - &30 : T$=MID$(T$,2) OTHERWISE Note% = INSTR("CDEFGAB$",C$) IF LEFT$(T$,1)="#" acc%(Note%) = 4 : T$=MID$(T$,2) IF LEFT$(T$,1)="%" acc%(Note%) = 0 : T$=MID$(T$,2) IF LEFT$(T$,1)="&" acc%(Note%) =-4 : T$=MID$(T$,2) pitch% = scale%(Note%) + acc%(Note%) IF pitch% pitch% += clef% WHILE LEFT$(T$,1)="+" pitch% += 48 : T$=MID$(T$,2) : ENDWHILE WHILE LEFT$(T$,1)="-" pitch% -= 48 : T$=MID$(T$,2) : ENDWHILE SOUND sync%(voice%)+voice%,1,pitch%,dur% sync%(voice%) = 0 ENDCASE ENDWHILE UNTIL FALSE END ; DATA TV14C+D+SV2$$V3FATV14C+BSV2$$V3C+A DATA TV14AFSV2$$V3FATV14F$SV2$$V3C+A DATA TV14GASV2$$V3B-D+TV14GFSV2$$V3BG DATA TV14ECSV2$$V3CBTV14C$SV2$$V3GE DATA TV14C+D+SV2$$V3AC+TV14C+BSV2$$V3F+C+ DATA TV14AFSV2$$V3DATV14FASV2$$V3D+A DATA TV18DSV24$GV38B-TV18ESV24$BV38C DATA TV116FSV2$V34FA8C+ ; DATA TV14AFSV2$$V3FATV14BGSV2$$V3EC+ DATA TV14AF8SV2$V34FATV18FSV2$V34C+A DATA TV14BDSV2$GV38B-TV14GFSV2$GV38B%- DATA TV14EC8SV2$V34CETV18CSV2$V34GB DATA TV14AFSV2$$V3FATV14BGSV2$$V3EC+ DATA TV14AFSV2$$V3FATV14FASV2$$V3C+F DATA TV18D4SV2$$V3B-FTV16E2E4SV2$$V3CB DATA TV116FSV28$AV34F-C8F ; DATA TV14C+D+SV2$$V3FATV14C+BSV2$$V3C+A DATA TV14AFSV2$$V3FATV14F$SV2$$V3C+A DATA TV14GASV2$$V3B-D+TV14GFSV2$$V3BG DATA TV14ECSV2$$V3CBTV14C$SV2$$V3GE DATA TV14C+D+SV2$$V3AC+TV14C+BSV2$$V3F+C+ DATA TV14AFSV2$$V3DATV14FASV2$$V3D+A DATA TV18DSV24$GV38B-TV18ESV24$BV38C DATA TV116FSV2$V34FA8C+ ; DATA TV14AFSV2$$V3FATV14BGSV2$$V3EC+ DATA TV14AF8SV2$V34FATV18FSV2$V34C+A DATA TV14BDSV2$GV38B-TV14GFSV2$GV38B%- DATA TV14EC8SV2$V34CETV18CSV2$V34GB DATA TV14AFSV2$$V3FATV14BGSV2$$V3EC+ DATA TV14AFSV2$$V3FATV14FASV2$$V3C+F DATA TV18D4SV2$$V3B-FTV16E2E4SV2$$V3CB DATA TV116FSV28$AV34F-C8F ; DATA TV14C+D+V2ABSV38C+TV14C+BV2AGSV38C+ DATA TV14AFV2F$SV38C+TV14FAV2$FSV38D+ DATA TV19DEV2$CSV3B-C DATA TV120FV2CSV3A DATA