Creates a one-octave keyboard that you can play on.
Content
Source Code
10 GO SUB 1000
14 FOR c=144 TO 151
15 FOR n=0 TO 7
16 READ a: POKE USR CHR$ c+n,a
17 NEXT n: NEXT c
18 DATA 15,15,15,15,15,15,7,0
19 DATA 240,240,240,240,240,240,224,128
20 DATA 15,15,15,15,7,0,0,0
21 DATA 240,240,240,240,224,128,128,128
22 DATA 128,128,128,128,128,255,128,128
23 DATA 0,0,0,0,0,255,0,0
24 DATA 128,128,255,128,128,128,128,128
25 DATA 0,0,255,0,0,0,0,0
30 PAPER 2: BORDER 0: CLS
40 REM Varaibles
41 LET a$="middle"
42 LET len=.3
43 LET o=0
100 REM Keyboard
105 PAPER 7
110 FOR n=8 TO 21: FOR m=7 TO 14
120 PRINT AT m,n;" "
130 NEXT m: NEXT n
140 INK 0: PLOT 64,61: DRAW 111,0
150 FOR n=64 TO 162 STEP 16: PLOT n,56: DRAW 0,63: NEXT n
160 FOR n=9 TO 20 STEP 2: FOR m=7 TO 10
170 IF n=13 THEN NEXT n
180 PRINT AT m,n;"▐▌"
190 NEXT m: PRINT AT m,n;"\c\d"
200 NEXT n
300 REM Notes
310 IF INKEY$="i" THEN LET o=-12: LET a$="bottom"
315 IF INKEY$="o" THEN LET o=0: LET a$="middle"
320 IF INKEY$="p" THEN LET o=12: LET a$=" top"
321 IF INKEY$="1" THEN LET len=.1
322 IF INKEY$="2" THEN LET len=.2
323 IF INKEY$="3" THEN LET len=.3
324 IF INKEY$="4" THEN LET len=.4
325 IF INKEY$="5" THEN LET len=.5
326 IF INKEY$="6" THEN LET len=.6
327 IF INKEY$="7" THEN LET len=.7
328 IF INKEY$="8" THEN LET len=.8
329 IF INKEY$="9" THEN LET len=.9
340 INK 7: PAPER 2: PRINT AT 0,20;"Lenght ";len;" "
350 PRINT AT 16,9;"^";AT 17,7;a$;" C"
400 INK 0: PAPER 7: IF INKEY$="a" THEN PRINT AT 14,8;"\e\f": BEEP len,0+o: PRINT AT 14,8;"\g\h"
410 IF INKEY$="w" THEN PRINT AT 11,9;"\a\b": BEEP len,1+o: PRINT AT 11,9;"\c\d"
420 IF INKEY$="s" THEN PRINT AT 14,10;"\e\f": BEEP len,2+o: PRINT AT 14,10;"\g\h"
430 IF INKEY$="e" THEN PRINT AT 11,11;"\a\b": BEEP len,3+o: PRINT AT 11,11;"\c\d"
440 IF INKEY$="d" THEN PRINT AT 14,12;"\e\f": BEEP len,4+o: PRINT AT 14,12;"\g\h"
450 IF INKEY$="f" THEN PRINT AT 14,14;"\e\f": BEEP len,5+o: PRINT AT 14,14;"\g\h"
460 IF INKEY$="t" THEN PRINT AT 11,15;"\a\b": BEEP len,6+o: PRINT AT 11,15;"\c\d"
470 IF INKEY$="g" THEN PRINT AT 14,16;"\e\f": BEEP len,7+o: PRINT AT 14,16;"\g\h"
480 IF INKEY$="y" THEN PRINT AT 11,17;"\a\b": BEEP len,8+o: PRINT AT 11,17;"\c\d"
485 IF INKEY$="h" THEN PRINT AT 14,18;"\e\f": BEEP len,9+o: PRINT AT 14,18;"\g\h"
490 IF INKEY$="u" THEN PRINT AT 11,19;"\a\b": BEEP len,10+o: PRINT AT 11,19;"\c\d"
500 IF INKEY$="j" THEN PRINT AT 14,20;"\e\f": BEEP len,11+o: PRINT AT 14,20;"\g\h"
600 GO TO 300
1000 PAPER 2: CLS : PRINT INK 7;AT 0,7;"Spectral Piano"; OVER 1; INK 7;AT 0,7;"______________"
1005 LET n$="ASDFGHJ"
1010 LET l=1: FOR n=7 TO 20 STEP 2: PRINT PAPER 7; INK 0;AT 10,n;n$(l): LET l=l+1: NEXT n
1020 LET n$="WETYU"
1030 LET l=1: FOR n=8 TO 18 STEP 2: IF n=12 THEN NEXT n
1040 PRINT PAPER 0; INK 7;AT 8,n;n$(l): LET l=l+1: NEXT n
1050 PRINT AT 6,0;"USE THESE KEYS";AT 11,7;"^";AT 12,3;"MIDDLE C"
1060 PRINT AT 4,20;"octave keys": PRINT AT 6,22;"I O P"
1070 PRINT AT 2,2;"Lenght of note in fractions";AT 3,4;"of a second";AT 4,1;" 1,2,3,4,5,6,7,8,9"
1080 PRINT INK 7;AT 14,0;"Spectral Piano is a computer version of a piano.Once you knowhow it works you will soon be trying to play your own tunes."
1090 INPUT "When ready press enter";z$
1100 PRINT OVER 1; FLASH 1; PAPER 7;AT 12,3;" "; FLASH 0; OVER 0; PAPER 2; INK 7;AT 14,0;"The keyboard is set out like that of a real piano.By pressingthe keys A to J (on the second row up)you will get a note from middle C to B.To obtain the sharps and flats press any of the keys displayed in white on black."
1110 INPUT "press enter when ready";z$
1120 PRINT INK 7;AT 14,0;"S.p also has a function to alterthe octave you are playing in, and a function to change the lenght of a note. 1-If at any time during playing you wish to change octaves just press key I to get the octave starting at bottom C,key O to get the middle C octave and P to get the top C octave"
1130 INPUT "Press enter when ready";z$
1140 PRINT INK 7;AT 9,0;"2.-if at any time during playing you wish to change the duration of the notes you are pressing press any key from 1 to 9.The higher the number the longer the note "
1150 FOR n=15 TO 21: PRINT AT n,0;" ": NEXT n: REM 32
1190 INPUT "Have you understood?(y/n)";z$: IF z$<>"y" THEN GO TO 1000
1200 RETURN
9950 PAUSE 0
9960 PAPER 7: INK 0: BORDER 7: FLASH 0: CLS
9997 STOP
9998 SAVE "PIANO" LINE 0
9999 VERIFY ""
Note: Type-in program listings on this website use ZMAKEBAS notation for graphics characters.

