SCREEN 1 CLS FOR i = 1 TO 11 LINE (16 * i - 4, 0)-(16 * (i + 1) - 6, 80), 3, BF IF i <> 4 AND i <> 7 AND i <> 11 THEN LINE (16 * i - 12, 0)-(16 * (i + 1) - 14, 50), 0, BF NEXT i PRINT "" PRINT " Q W E T Y I O P" PRINT "" PRINT "" PRINT " A S D F G H J K L ; '" PRINT "" PRINT "" PRINT "" PRINT "This program uses the keyboard" PRINT "as a simple piano or music synthesizer." 'PRINT "To play the piano, press " 'PRINT "Q W E T Y I O P" 'PRINT " A S D F G H J K L ; '" PRINT "To change the octave, press 0-6" PRINT "To decrease the octave, press ," PRINT "To increase the octave, press ." PRINT "To decrease note length, press [" PRINT "To increase note length, press ]" PRINT "To play legato, press 7" PRINT "To play normal, press 8" PRINT "To play staccato, press 9" PRINT "To play echo, press /" PRINT "To play octave echo, press ?" PRINT "To quit, press ESC" DATA "q","a","w","s","e","d","f","t","g","y","h","j","i","k","o","l","p",";","'" DATA "f#","g","g#","a","a#","b","c","c#","d","d#","e","f","f#","g","g#","a","a#","b","c" DIM letters$(20) DIM notes$(20) FOR i = 1 TO 19 READ letters$(i) NEXT i FOR i = 1 TO 19 READ notes$(i) NEXT i l% = 16 oct% = 4 echo = -1 octecho = -1 sharpecho = -1 DO a$ = INKEY$ play$ = "" IF a$ <> "" THEN 'PRINT STR$(ASC(a$)); END IF FOR i = 1 TO 19 IF a$ = letters$(i) THEN play$ = notes$(i) NEXT i SELECT CASE a$ CASE "0" TO "6" oct% = ASC(a$) - ASC("0") CASE "," oct% = oct% - 1 IF oct% < 0 THEN oct% = 6 CASE "." oct% = oct% + 1 IF oct% > 6 THEN oct% = 0 CASE "/" echo = -echo CASE "?" octecho = -octecho CASE "#" sharpecho = -sharpecho CASE "[" l% = l% * 2 IF l% < 1 THEN l% = 64 CASE "]" l% = l% / 2 IF l% > 64 THEN l% = 1 CASE "-" PLAY "MB" CASE "=" PLAY "MF" CASE "7" PLAY "ML" CASE "8" PLAY "MN" CASE "9" PLAY "MS" END SELECT coct% = oct% IF a$ = "'" AND coct% < 6 THEN coct% = coct% + 1 IF coct% > 0 AND (a$ = "q" OR a$ = "a" OR a$ = "w" OR a$ = "s" OR a$ = "e" OR a$ = "d") THEN coct% = coct% - 1 IF (play$ <> "" AND a$ >= "a" AND a$ <= "z") OR a$ = ";" OR a$ = "'" THEN PLAY "L" + STR$(l%) PLAY "O" + STR$(coct%) PLAY "X" + VARPTR$(play$) IF echo = 1 THEN PLAY "L" + STR$(l%) PLAY "O" + STR$(coct%) PLAY "X" + VARPTR$(play$) END IF IF octecho = 1 AND coct% < 6 THEN PLAY "L" + STR$(l%) PLAY "O" + STR$(coct% + 1) PLAY "X" + VARPTR$(play$) END IF IF sharpecho = 1 THEN PLAY "L" + STR$(l%) PLAY "O" + STR$(coct%) IF play$ = "f" OR play$ = "g" OR play$ = "a" OR play$ = "c" OR play$ = "d" THEN play$ = play$ + "#" ELSEIF play$ = "b" THEN play$ = "c" IF coct% < 6 THEN PLAY "O" + STR$(coct% + 1) ELSEIF play$ = "e" THEN play$ = "f" END IF PLAY "X" + VARPTR$(play$) END IF END IF LOOP WHILE a$ <> CHR$(27) ' ESC CLS SYSTEM