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.