start     Articole     Despre mine     Contact     Cursul ABCprog    

Cum programezi un microcontroler sa cante Jingle Bells

A inceput sezonul colindelor, asa ca va dedic urmatoarea melodie, pe care am programat-o bit cu bit.

In continuare urmeaza detalii despre de modul in care am programat sunetul.
1. Ce este muzica?

Nu sunt nici pe departe specialist in muzica (ba chiar sunt mult mai aproape de polul opus), asa ca ma voi multumi cu urmatoarea definitie (destul de evidenta) a muzicii:

Muzica este o succesiune de sunete atent selectate.

2. Ce este sunetul?

Bun, dar ce este sunetul? Daca revenim la lectiile de fizica din liceu vom vedea ca sunetul este o vibratie a aerului (care este un gaz (deci compus din molecule), si nicidecum vid).

Iar daca ne amintim putin si de lectiile de anatomie (referitoare la aparatul auditiv) vom vedea ca si ele confirma acest lucru (intrucat perceperea sunetelor se face prin intermediul acelei membrane din ureche numite timpan, care capteaza vibratiile aerului la fel cum panzele unei nave (de pirati (din Caraibe)) capteaza vantul (care este si el tot o forma de miscare a aerului)).

Diferenta dintre miscare si vibratie este aceea ca miscarea implica deplasare dintr-un loc in altul, in vreme ce vibratia se produce in jurul unei pozitii de echilibru. Sunetul le imbina pe amandoua. El consta intr-o astfel de oscilatie a aerului ce se deplaseaza din aproape in aproape de la difuzor pana la urechile auditoriului (ca si pana in cele mai ascunse colturi ale incaperii unde este generat).

Citind ce am scris pana aici probabil deja te-ai astepta ca pasarile sa produca sunete atunci cand dau din aripi (caci produc o miscare oscilatorie a aerului, nu?). Ei bine, mai e un amanunt. Nu orice vibratie a aerului este perceputa ca fiind un sunet, ci doar acelea ce au frecventa cuprinsa intre aproximativ 20Hz si 20000Hz (adica 20kHz).

Adica daca ai reusi sa dai palme la aer cu o viteza de peste 20 de miscari pe secunda, ai produce un sunet. Deci, altfel spus, aerul incepe sa planga daca este batut cu lovituri a caror frecventa depaseste cateva zeci de hertzi.

Iar partea si mai interesanta este ca acest plans al aerului suna placut pentru ureche daca frecventa are anumite valori.

3. Ce sunt notele muzicale?

Pentru a putea inregistra intr-o forma scrisa muzica s-a inventat portativul si toate notatiile muzicale care se fac pe el. Asa ca daca vreau sa cant Jingle Bells va trebui sa fiu capabil sa inteleg acele notatii si sa le traduc in sunetele corespunzatoare.

Si astfel ajungem si la lectiile de muzica din scoala generala. Do, re, mi, fa, sol, la, si, do. Da, astea sunt notele standard. Si sunt convins ca mai tii minte cum sa le recunosti atunci cand le vezi scrise pe un portativ, in functie de pozitia lor (mai sus sau mai jos).

Dar ce inseamna (din punct de vedere fizic) fiecare nota muzicala in parte?

Asa cum am zis mai sus, fiecare nota e un sunet. Adica o oscilatie a aerului ce se face cu o anumita frecventa (placuta urechii). Deci difenta dintre note e data practic de frecventa acestei oscilatii.

Cautand pe internet am gasit urmatorul tabel de corespondenta intre notele muzicale si frecventele lor. (Vezi pagina din stanga, tabelul de sus. Iar in partea dreapta am calculat si perioadele de timp corespunzatoare fiecarei frecvente.)

 

OK, dar ce inseamna cerculetele acelea cu codite ce marcheaza fiecare nota muzicala?

Ele indica durata notei. Adica timpul cat sa dureze sunetul. Cerculetul plin cu coada dureaza un timp, cerculetul gol cu coada dureaza doi timpi, cerculetul plin cu stegulet dureaza o jumatate de timp. Sau, altfel, spus: patrime, doime, optime. Vezi in imagine duratele notelor muzicale. (Pagina din dreapta, la jumatate.)

 

Punctul dupa o nota ii mareste durata cu o jumatate din durata ei, iar semnul acela ciudat (ca o mazgalitura) marcheaza o pauza (adica lipsa sunet) cu durata de un timp (deci egala cu durata unei patrimi).

Dar cat dureaza un timp in muzica?

Se pare ca aici lucrurile nu sunt fixe. Daca se pastreaza proportiile dintre duratele diferitelor tipuri de note (nota intreaga, doime, patrime, optime, saisprezecime), atunci o aceeasi melodie poate fi canta mai repede sau mai lent fara sa fie afectata prea tare. Urechea (de fapt creierul, caci urechea doar percepe, iar el proceseaza) recunoaste ca este vorba despre aceeasi melodie, doar ca mai rapida sau mai lenta.

Asa ca aici am libertatea de a-mi alege singur durata unui timp. In Jingle Bells-ul pe care l-ai ascultat la inceputul acestui articol am ales aceasta durata ca fiind 160ms (adica 0.160 secunde).

4. Notele sunt colorate?

Daca te uiti pe portativ, imi vei raspunde ca nu. Toate sunt fie albe, fie negre. Cu toate astea, o aceeasi nota suna diferit in functie de instrumentul muzical la care este cantata.

Cum asa? Doua sunete cu aceeasi frecventa si aceeasi durata pot sa sune diferit?

Da, pentru ca frecventa imi spune doar cat de rapid se repeta oscilatia, dar nu imi spune si forma ei exacta.

Nu voi intra in detalii aici, ci ma voi limita la cazul cel mai simplu. Si ce poate fi mai simplu decat sa lucrez cu biti.

1 si 0. Negru si alb. Aprins si stins.

Cel mai simplu sunet pe care il pot genera cu un microcontroler este un semnal ce este aprins jumatate din perioada si stins cealalta jumatate.

Sa iau, de exemplu, nota La. Frecventa ei e de 440Hz, ceea ce inseamna ca sunetul se repeta la fiecare 2273us (microsecunde, adica a milioana parte dintr-o secunda). Deci o pot genera trimitand la difuzor bitul 1 (adica o tensiune electrica de aproximativ 3V) timp de 1136us (adica jumatate din perioada notei) si bitul 0 (adica o tensiune electrica de aproximativ 0V) pentru cealalta jumatate din perioada. Si repet asta atata timp cat dureaza nota.

Pare prea simplu ca sa mearga, nu?

Si totusi merge.

Nota rezultata astfel suna mai mult robotic decat muzical, e adevarat. Dar e uimitor cate lucruri poti face cu doar doi biti, nu?

5. Cum separi doua note consecutive de aceeasi frecventa?

Aparent ceea ce ti-am spus pana aici ar fi suficient ca sa-ti faci microcontrolerul sa cante. Totusi, un amanunt subtil lipseste.

Daca ai de cantat doua note La cu durate de o patrime, una dupa alta, ce te faci? Va iesi o nota La de o doime.

Solutia e sa faci o separatie intre cele doua note. Eu am facut-o introducand dupa fiecare nota cantata o pauza de o optime. (Acesta este motivul pentru care vezi LED-ul rosu stingandu-se si aprinzandu-se la fiecare nota. Am trimis pe el exact acelasi semnal pe care l-am trimis pe difuzor. Redundant, stiu. Atat LED-ul cat si difuzorul prezinta aceeasi informatie. Numai ca urechea nu vede LED-ul, iar ochiul nu aude difuzorul.)

————————————————
Daca ti-a placut articolul acesta, te rog sa-l trimiti si prietenilor tai pentru a ne bucura impreuna de sarbatorile de iarna ce se apropie. Iar daca vrei sa te apuci si tu de programare, iata care sunt primii pasi pe care ti-i recomand. (A!, si nu uita sa te abonezi la newsletter si sa dai Like la pagina de Facebook din dreapta pentru a fi la curent cu ce mai postez.)





Loading Facebook Comments ...