terça-feira, 19 de junho de 2012

Simulando um piano no MSX

Olá amantes do MSX.

Eis um programinha em BASIC que escrevi, para simular um "piano" no MSX. Você começa configurando o programa com alguns valores iniciais para o envelope, período do envelope, duração e oitava das notas. Em seguida o programa te deixa no controle para "tocar" o piano com essas configurações, usando o teclado. Você gera as notas musicais usando as teclas ZXCVBM, ASDFGHJ e QWERTYU. É possível mudar a oitava usando as teclas numéricas de 1 até 8. Para mudar as outras configurações é preciso reiniciar o programa pressionando a tecla numérica 0 (zero). A configuração inicial aparece na tela no mesmo formato do comando PLAY do BASIC, e conforme você vai tocando o piano, as notas e oitavas vão aparecendo na mesma ordem na tela, na mesma notação do PLAY. Para voltar atrás apagando as notas use a tecla backspace. Para dar um espaço pressione a barra de espaço. Para ir para a próxima linha pressione a tecla return (ou enter).





10 BEEP:SCREEN 0,,0:COLOR 1,15,15:KEYOFF:WIDTH 40:PLAY"V15":LOCATE 0,0,0
20 PRINT"PIANO MSX"
25 PRINT"Por Fernando Aires Castello"
26 PRINT"---------------------------------------"
40 PRINT"C D E F G A B  = ZXCVBNM"
50 PRINT"C#D#E#F#G#A#B# = ASDFGHJ"
60 PRINT"C-D-E-F-G-A-B- = QWERTYU"
65 PRINT"MUDAR OITAVA   = 12345678"
66 PRINT"REINICIAR      = 0"
70 PRINT"---------------------------------------"
80 LINE INPUT"DIGITE ENVELOPE (0-15): ";E$
81 IF (VAL(E$)<0) OR (VAL(E$)>15) THEN RUN
82 LINE INPUT"DIGITE PERIODO (0-65535): ";P$
83 IF (VAL(P$)<0) OR (VAL(P$)>65535!) THEN RUN
84 LINE INPUT"DIGITE DURACAO (1-64): ";S$
85 IF (VAL(S$)<1) OR (VAL(S$)>64) THEN RUN
86 LINE INPUT"DIGITE OITAVA (1-8): ";O$
87 IF (VAL(O$)<1) OR (VAL(O$)>8) THEN RUN
89 PLAY"S"+E$+"L"+S$+"M"+P$+"O"+O$
90 PRINT"---------------------------------------"
95 LOCATE 0,CSRLIN,1
99 PRINT"V15S"+E$+"L"+S$+"M"+P$+"O"+O$
100 K$=INKEY$:IFK$=""THEN100
101 IF K$=CHR$(13) THEN PRINT
102 IF K$=CHR$(8) THEN PRINT CHR$(8)+" "+CHR$(8);
103 IF K$=" " THEN PRINT " ";
110 IF K$="Z" THEN PLAY"C":PRINT"C";
111 IF K$="X" THEN PLAY"D":PRINT"D";
112 IF K$="C" THEN PLAY"E":PRINT"E";
113 IF K$="V" THEN PLAY"F":PRINT"F";
114 IF K$="B" THEN PLAY"G":PRINT"G";
115 IF K$="N" THEN PLAY"A":PRINT"A";
116 IF K$="M" THEN PLAY"B":PRINT"B";
120 IF K$="A" THEN PLAY"C#":PRINT"C#";
121 IF K$="S" THEN PLAY"D#":PRINT"D#";
122 IF K$="D" THEN PLAY"E#":PRINT"E#";
123 IF K$="F" THEN PLAY"F#":PRINT"F#";
124 IF K$="G" THEN PLAY"G#":PRINT"G#";
125 IF K$="H" THEN PLAY"A#":PRINT"A#";
126 IF K$="J" THEN PLAY"B#":PRINT"B#";
130 IF K$="Q" THEN PLAY"C-":PRINT"C-";
131 IF K$="W" THEN PLAY"D-":PRINT"D-";
132 IF K$="E" THEN PLAY"E-":PRINT"E-";
133 IF K$="R" THEN PLAY"F-":PRINT"F-";
134 IF K$="T" THEN PLAY"G-":PRINT"G-";
135 IF K$="Y" THEN PLAY"A-":PRINT"A-";
136 IF K$="U" THEN PLAY"B-":PRINT"B-";
140 IF K$="1" THEN PLAY"O1":PRINT"O1";
141 IF K$="2" THEN PLAY"O2":PRINT"O2";
142 IF K$="3" THEN PLAY"O3":PRINT"O3";
143 IF K$="4" THEN PLAY"O4":PRINT"O4";
144 IF K$="5" THEN PLAY"O5":PRINT"O5";
145 IF K$="6" THEN PLAY"O6":PRINT"O6";
146 IF K$="7" THEN PLAY"O7":PRINT"O7";
147 IF K$="8" THEN PLAY"O8":PRINT"O8";
148 IF K$="0" THEN RUN
500 GOTO 100
1000 END