(Nota di redazione: questo articolo è molto vecchio. All’epoca avevo 15 anni. Proseguendo nella lettura potresti sentire il bisogno di strapparti i bulbi oculari. Buona lettura.)
Nella libreria crt
del Pascal esistono dei comandi speciali che spesso non si insegnano nei licei o nelle scuole, perchè “non utili all’appredimento del linguaggio”. Cioè, non solo ci tocca imparare questo linguaggio proprietario di merda, ma pure manco lo sfruttiamo.
Dato che ho tempo per cazzeggiare, ecco qui ciò che ho trovato:
SOUND(hz)
; produce un suono alla frequenza inseritaDELAY(time)
; produce un ritardo in millisecondiNOSOUND
; interrompe il suono (indispensabile!)
Questi tre comandi si utilizzano in successione così elencati: con il primo lo speaker emette una frequenza (ad esempio 440 per un LA perfetto) con il secondo si prolunga la frequenza (ad esempio 1000 per un secondo) e con il terzo si interrompe la nota.
Un utilizzo molto interessante di queste nozioni può essere quello di far eseguire dal nostro Turbo Pascal (aka Masturbo Pasquale) una parte dell’Inno alla Gioia di Beehtoven, ad esempio…
Listato:PROGRAM B; USES CRT; VAR X,I:INTEGER; PROCEDURE A(X:INTEGER); BEGIN SOUND(X); DELAY(1000); NOSOUND; END; BEGIN CLRSCR; WRITE('Stai ascoltanto l''Inno alla Gioia di Beethoven.'); FOR I:=0 TO 1 DO BEGIN A(330);A(330);A(349);A(392); A(392);A(349);A(330);A(294); A(262);A(262);A(294);A(330); IF(I=0)THEN BEGIN A(330);A(294);A(294); DELAY(1000); END ELSE BEGIN A(294);A(262);A(262); END; NOSOUND; END; CLRSCR; WRITE('Grazie per aver ascoltato Beethoven.'); READLN; END.
Qui sopra abbiamo creato una procedura A(x), che richiama al suo interno SOUND(x), DELAY(200) e NOSOUND; esclusivamente per non ripetere i tre comandi di volta in volta.
La frequenza delle note
Per creare la scala di do che ci è servita per comporre il brano superiore, abbiamo soltanto utilizzato questo schema di note/frequenze da inserire nel comando SOUND()
Do | 262 | Do# | 277 | Re | 294 | Re# | 311 | Mi | 330 | Fa | 349 |
Fa# | 370 | Sol | 392 | Sol# | 415 | La | 440 | La# | 466 | Si | 49 |
Quindi, in conclusione, se vogliamo far emettere dalla macchina un LA per 2 secondi faremo:
begin
SOUND(440);
DELAY(2000);
NOSOUND;
end;
Tutto questo perchè il LA è rappresentato da un suono con frequenza 440 hertz, e due secondi sono rappresentati da un delay di 2000 millisecondi. Insomma, capito no?
Dunque è tutto, buona navigazione!