Prova a suonare qualche motivetto con il Pascal…
- l’utente può scegliere il tempo per il brano
- il valore di tempo viene utilizzato per inizializzare il vettore RITARDI con
tempo, 2*tempo, 4*tempo, 8*tempo, … - per ottenere lo staccato le note vengono accorciate e seguite da una brevissima pausa
FUSA= 1/128
Uses
Crt;
Const
PAUSA=0;
DO4=131; MI4=247; SOL4=196;
DO5=262; DOd5=277; REb5=277; RE5=294; REd5=311; MIb5=311; MI5=330; FA5=349; FAd5=370;
SOLb5=370; SOL5=392; SOLd5=415; LAb5=415; LA5=440; LAd5=466; SIb5=466; SI5=494;
DO6=523; DOd6=554; RE6=587; REd6=622; MI6=659; FA6=698;
DO7=1046; MI7=1319; SOL7=1568; SI7=1976;
FUSA=1;
SEMIBISCROMA=2; BISCROMA=3; SEMICROMA=4; CROMA=5;
SEMIMINIMA=6; MINIMA=7; SEMIBREVE=8; BREVE=9;
LUNGA=10; MASSIMA=11;
Var
RITARDI: Array[1..11] of LongInt;
scelta ,
tempo : integer;
procedure cambiaTempo;
Var
i: integer;
begin
RITARDI[1]:=tempo;
For i:=2 to 11 do
RITARDI[i]:=2*RITARDI[i-1];
end;
procedure nota(frequenza, durata: integer);
begin
if(frequenza <> PAUSA) then
Sound(frequenza);
Delay(RITARDI[durata]-RITARDI[1]);
NoSound;
Delay(RITARDI[1]); { per lo staccato }
end;
procedure fraMartino;
begin
nota(DO5, SEMIMINIMA); nota(RE5, SEMIMINIMA); nota(MI5, SEMIMINIMA); nota(DO5, SEMIMINIMA);
nota(DO5, SEMIMINIMA); nota(RE5, SEMIMINIMA); nota(MI5, SEMIMINIMA); nota(DO5, SEMIMINIMA);
nota(MI5, SEMIMINIMA); nota(FA5, SEMIMINIMA); nota(SOL5, MINIMA);
nota(MI5, SEMIMINIMA); nota(FA5, SEMIMINIMA); nota(SOL5, MINIMA);
nota(SOL5, CROMA); nota(LA5, CROMA); nota(SOL5, CROMA); nota(FA5, CROMA);
nota(MI5, SEMIMINIMA); nota(DO5, SEMIMINIMA);
nota(SOL5, CROMA); nota(LA5, CROMA); nota(SOL5, CROMA); nota(FA5, CROMA);
nota(MI5, SEMIMINIMA); nota(DO5, SEMIMINIMA);
nota(DO5, SEMIMINIMA); nota(SOL4, SEMIMINIMA); nota(DO5, MINIMA);
nota(DO5, SEMIMINIMA); nota(SOL4, SEMIMINIMA); nota(DO5, MINIMA);
end;
procedure jingleBells;
begin
nota(si5, semiminima); nota(si5, semiminima); nota(si5, minima);
nota(si5, semiminima); nota(si5, semiminima); nota(si5, minima);
nota(si5, semiminima); nota(re6, semiminima); nota(sol5, semiminima); nota(la5, semiminima);
nota(si5, semibreve);
nota(do6, semiminima); nota(do6, semiminima); nota(do6, minima);
nota(do6, semiminima); nota(si5, semiminima); nota(si5, minima);
nota(si5, semiminima); nota(la5, semiminima); nota(la5, semiminima); nota(si5, semiminima);
nota(la5, minima); nota(re6, minima);
nota(si5, semiminima); nota(si5, semiminima); nota(si5, minima);
nota(si5, semiminima); nota(si5, semiminima); nota(si5, minima);
nota(si5, semiminima); nota(re6, semiminima); nota(sol5, semiminima); nota(la5, semiminima);
nota(si5, semibreve);
nota(do6, semiminima); nota(do6, semiminima); nota(do6, minima);
nota(do6, semiminima); nota(si5, semiminima); nota(si5, minima);
nota(re6, semiminima); nota(re6, semiminima); nota(do6, semiminima); nota(la5, semiminima);
nota(sol5, minima);
end;
begin
tempo:=10;
cambiaTempo;
repeat
clrscr;
writeln(' --- 4 note con il TurboPascal 6.0 ---');
writeln;
writeln(' 0. Uscita');
writeln(' 1. Cambia tempo (', tempo,')');
writeln(' 2. Fra Martino');
writeln(' 3. Jingle Bells');
writeln;
write('--> ');
readln(scelta);
case(scelta) of
0: ;
1: begin
Write('Tempo (',tempo,') = ');
ReadLn(tempo);
cambiaTempo;
end;
2: fraMartino;
3: jingleBells;
end;
until(scelta=0);
end.