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.