Progetto realizzato dalla prof.ssa Oriana Pagliarone
Scheda di lavoro n.1
Calcolo della frequenza del semitono
In una scala musicale temperata 2 ottave successive stanno tra loro
come 1 sta a 2
Ossia se x è la frequenza del do di un'ottava ,
2x è la frequenza del do dell'ottava successiva
Inoltre le frequenze delle note formano una progressione geometrica di ragione
q = semitono
Ricordando che in un'ottava ci sono 12 semitoni (tra tasti bianchi e neri)
calcoliamo la frequenza di un semitono
a1 = x
a13 = 2 x
a13 = a1 q12
2 x = x q12
q = (2)1/12
Scheda di lavoro n.2
Calcolo della frequenza della nota più bassa in un
pianoforte
Sapendo che, in un pianoforte, 440 è la frequenza del la dell'ottava centrale
(dopo 48 note da quella avente frequenza più bassa ),
calcoliamo la frequenza della nota più bassa :
440= Nota_ più_ bassa (2)48/12
Nota_più_ bassa = 440/24 = 27.5
Scheda di lavoro n.3
Calcolo della frequenza di una nota
Ora sapendo il valore del semitono e della
frequenza della nota più bassa
possiamo calcolare la frequenza di una qualunque
nota
( dopo x note da quella più bassa ):
frequenza = Nota_più_bassa (2)x/12
Scheda di lavoro n.4
Implementazione in Turbo Pascal
Per implementare in Turbo Pascal una procedura che calcoli le frequenze delle note è
opportuno trasformare la formula precedente in:
frequenza = Nota_più_bassa e x(log2)/12
Ora è possibile scrivere la procedura per calcolare le
frequenze delle note dell'ottava centrale
Procedure lenote;
function nota(x:integer):integer;
begin
rapp:=ln(2)/12;
nota : = round(notapiùbassa* exp(rapp*x));
end;
begin
notado:=nota(52);
re:=nota(54);
mi:=nota(56);
fa:=nota(57);
sol:=nota(59);
la:=nota(61);
si:=nota(63);
end;
Scheda di lavoro n.5
Ora possiamo inserire questa procedura in un
piccolo programma che ci permetterà di suonare
le note e anche l’inno alla gioia di Beethoven,
adoperando uno spartito semplificato, utilizzando
l'istruzione sound per il suono di una nota ,
nosound per sottolineare la fine di una battuta e
delay per la durata delle note.
(la durata delle note dipende molto dal
microprocessore del proprio computer)
Passiamo alla procedura che permetterà agli
alunni di suonare con il calcolatore l'inno alla
gioia:
Prima le 8 note
( dal do al do dell’ottava successiva)
e poi l’inno alla gioia
Suona.zip
Inno alla gioia
Certo questo è decisamente più bello e
completo ma è stato registrato da un
disco, l’altro è stato implementato nota
per nota in Turbo Pascal
Scheda di lavoro n. 6
Ora utilizziamo questi programmi di musica per giocare al
gioco del 7 :
dopo un’introduzione grafica e sonora (musica tratta
dalla colonna sonora del film “La pantera rosa”), si passa
al gioco : il computer scrive un numero casuale, se esso
è multiplo di 7 o inizia o termina per 7 il giocatore deve
scrivere “s” altrimenti deve scrivere “n”. In ogni caso vi
sarà un commento scritto e sonoro ( in caso di risposta
corretta l’inno alla gioia , in caso di risposta errata un
commento sonoro ironico). Il computer calcola anche il
numero di risposte esatte e dà la possibilità di terminare
o continuare a giocare quante volte si vuole.
Clicca qui per lanciare il programma gioco7s
program gioco7s;
{$i graph.p}
const notapiubassa=27.5;
semitono=1.05946;
var n,domande,esatte:integer;
risposta:char;
rispo:char;
var notado,re,mi,fa,sol,la,si,do2,re2,si2,re3,fa2,sib,la2,sol2,re1,mi1,fa1,si1:integer;
rapp:real;
procedure lenote;
function nota(x:integer):integer;
begin
rapp:=ln(2)/12;
nota:=round(notapiubassa*exp(rapp*x));
end;
begin
notado:=nota(52);
re:=nota(54);
re3:=nota(55);
mi:=nota(56);
fa:=nota(57);
fa2:=nota(58);
sol:=nota(59);
la:=nota(61);
si:=nota(63);
do2:=nota(64);
re2:=nota(66);
si2:=nota(51);
sib:=nota(50);
la2:=nota(49);
sol2:=nota(47);
re1:=nota(42);
mi1:=nota(44);
fa1:=nota(46);
si1:=nota(39);
end;
procedure ritornello;
begin
sound(si);
delay(8000);
nosound;
sound(si);
delay(8000);
nosound;
sound(notado);
delay(8000);
nosound;
sound(re);
delay(8000);
nosound;
sound(re);
delay(8000);
nosound;
sound(notado);
delay(8000);
nosound;
sound(si);
delay(8000);
nosound;
sound(la);
delay(8000);
nosound;
sound(sol);
delay(8000);
nosound;
sound(sol);
delay(8000);
nosound;
sound(la);
delay(8000);
nosound;
sound(si);
delay(8000);
nosound;
sound(si);
delay(12000);
nosound;
sound(la);
delay(8000);
nosound;
sound(la);
delay(12000);
nosound;
end;
procedure ritornello2;
begin
sound(re3);
delay(1600);
nosound;
sound(mi);
delay(6400);
nosound;
delay(4800);
nosound;
sound(fa2);
delay(1600);
nosound;
sound(sol);
delay(6400);
nosound;
delay(4800);
nosound;
sound(re3);
delay(1600);
nosound;
sound(mi);
delay(4800);
nosound;
sound(fa2);
delay(1600);
nosound;
sound(sol);
delay(4800);
nosound;
sound(do2);
delay(1600);
nosound;
sound(si);
delay(4800);
nosound;
sound(mi);
delay(1600);
nosound;
sound(sol);
delay(4800);
nosound;
sound(si);
delay(1600);
nosound;
sound(sib);
delay(16000);
nosound;
sound(la);
delay(3200);
nosound;
sound(sol);
delay(3200);
nosound;
sound(mi);
delay(3200);
nosound;
sound(re);
delay(3200);
nosound;
sound(mi);
delay(3200);
nosound;
sound(mi);
delay(12800);
nosound;
delay(6400);
nosound;
delay(4800);
nosound;
end;
procedure ritornello3;
begin
sound(re);
delay(4000);
nosound;
sound(mi);
delay(4000);
nosound;
sound(fa);
delay(6400);
nosound;
delay(2400);
nosound;
sound(mi);
delay(6400);
nosound;
sound(re);
delay(8000);
nosound;
sound(re);
delay(4000);
nosound;
sound(mi);
delay(2400);
nosound;
sound(fa);
delay(3200);
nosound;
sound(sol);
delay(4000);
nosound;
sound(fa);
delay(4000);
nosound;
sound(mi);
delay(4000);
nosound;
sound(re);
delay(12800);
nosound;
end;
procedure cornice2;
var k:integer;
begin
graphcolormode;
writeln;
writeln;
writeln;
writeln;
writeln('
IL NUOVO');
writeln;
writeln('
GIOCO DEL 7 ');
writeln;
writeln;
writeln;
writeln;
writeln;
writeln('
PREMERE INVIO PER GIOCARE');
writeln;
writeln;
writeln;
writeln('
Programma realizzato ');
writeln;
writeln( ' dalla prof.ssa Oriana Pagliarone ');
writeln;
writeln;
for k:= 0 to 20 do
begin
circle(8+k*16,0,8,1);
circle(0,8+k*16,8,1);
circle(8+k*16,200,8,1);
circle(320,8+k*16,8,1);
end;
end;
procedure cornice;
var k:integer;
begin
for k:= 0 to 20 do
begin
circle(8+k*16,0,8,1);
circle(0,8+k*16,8,1);
circle(8+k*16,200,8,1);
circle(320,8+k*16,8,1);
circle(280,169,14,1);
circle(280,169,10,3);
circle(280,169,8,2);
circle(280,169,6,1);
circle(280,169,4,3);
circle(280,169,2,2);
circle(280,169,0,1);
circle(240,145,12,1);
circle(240,145,8,3);
circle(240,145,6,2);
circle(240,145,4,1);
circle(240,145,2,3);
circle(240,145,0,2);
circle(185,155,13,2);
circle(185,155,9,1);
circle(185,155,7,3);
circle(185,155,5,2);
circle(185,155,3,1);
circle(185,155,2,3);
circle(185,155,0,2);
circle(60,150,15,1);
circle(60,150,11,3);
circle(60,150,9,2);
circle(60,150,7,1);
circle(60,150,5,3);
circle(60,150,3,2);
circle(60,150,1,1);
circle(120,165,11,3);
circle(120,165,7,2);
circle(120,165,5,1);
circle(120,165,3,3);
circle(120,165,1,2);
end;
end;
begin
clrscr;
lenote;
graphcolormode;
cornice2;
ritornello2;
readln;
domande:=0;
esatte:=0;
repeat
clrscr;
graphcolormode;
cornice;
domande:=domande+1;
n:=trunc(random*100);
writeln;
writeln;
writeln(' Il computer sceglie un numero a caso');
writeln;
writeln('
',n);
cornice;
writeln;
writeln('
Se il numero è multiplo di 7');
writeln('
o inizia o termina per 7 ');
writeln('
scrivi s, ALTRIMENTI n');
cornice;
writeln;
write('
');
cornice;
readln( risposta);
cornice;
if((((n mod 7 =0)or(n mod 10 =7))or(n div 10 = 7))and(risposta ='s'))or
(not((((n mod 7 =0)or(n mod 10 =7))or(n div 10=7)))and(risposta ='n'))
then
begin
esatte:=esatte+1;
writeln;
writeln('
BRAVO !');
ritornello;
end
else
begin
writeln;
writeln('
IMPARA LA MATEMATICA !');
ritornello3;
end;
writeln;
write(' Vuoi continuare a giocare ?(s/n)');
cornice;
cornice;
readln(rispo);
until(rispo='n');
cornice;
writeln(' Il numero di risposte ESATTE E''',esatte);
writeln(' su un totale di ', domande ,' domande');
cornice;
readln;
end.