Autorul Instructables sub porecla rgco a venit cu un sintetizator de patru voci de 1,5 octave pe Arduino Uno. Spre comparație, sintetizatoarele pentru copii răspândite, care diferă unele de altele doar în ceea ce privește designul și realizate de același cip sunt cu trei voci. Adevărat, ei pot însoți automat muzica cu ritm, pot memora melodii cu o singură voce și imita vocile animalelor. Dar atunci produs home-made suna mai frumos. De ce?
Totul este vorba despre parametri. Frecvența de eșantionare 31 kHz, 9 biți, 4 voci, sinteză FM cu o variază de timp variabilă, plic ADSR, 12 instrumente virtuale, 18 taste cu o distanță de 1,5 octave.
Maestrul compune circuitul sintetizator în Fritzing:
În ea, simulează locația componentelor pe o placă de panou tip panou și conexiunile dintre acestea:
Și colectează schema în viața reală:
Doar „turnați și folosiți” este cel mai simplu lucru pe care îl puteți face cu designul. 18 taste (de dinaintea celei de-a patra octave la FA a cincea) - pentru a juca, nouăsprezece comută instrumentele virtuale într-un inel: pian, xilofon, chitară, cipale, clopote, funky, vibrato, metal, vioară, bas, trompetă, acordeon. Natura sunetului este afectată de durata apăsărilor, dar nu de efort, spre deosebire de sintetizatoarele profesionale. Dar dezvoltatorul dorește să încercați să vă programați și instrumentele virtuale. Fiecare dintre ei este dat de zece parametri. Expertul vă spune de ce parametru depinde.
Ldness - volum
Dacă acest parametru este mai mic de 64, suprasarcina și distorsiunile aferente sunt excluse. Dar dacă programați un astfel de instrument virtual care nu sună la volum maxim timp îndelungat, valoarea acestui parametru poate depăși 64, deoarece toate cele patru voci sună simultan rar.
pitch0 - schimbare pitch
Intervalul corespunde celor de mai sus, dacă setați acest parametru la 12. Reducerea se deplasează în jos, crește - crește. Zero corespunde unei deplasări în jos exact a unei octave, 24 - cu exact o octavă.
ADSR_a - viteza de redresare volum de la zero la maxim
Cu cât este mai mic, cu atât mai lent.De exemplu, 8192 corespunde la 4 ms, 256 la 128 ms.
ADSR_d - viteza pentru a reduce volumul de la maxim la cel specificat de parametrul ADSR_s.
Principiul este același.
ADSR_s - valoarea la care volumul scade la apăsarea tastei o lungă perioadă de timp
De exemplu, 256 - volumul rămâne maxim tot timpul în timp ce este menținută tasta. 192 - volumul scade la 80% și rămâne așa, în timp ce tasta este ținută apăsată. 0 - volumul scade la zero, chiar dacă tasta este ținută apăsată.
ADSR_r - viteza pentru a reduce volumul la zero după eliberarea cheii
Principiul este același ca și pentru parametrii ADSR_a și ADSR_d.
FM_inc - raportul dintre frecvența de modulare și ton
Cu o valoare de 256, acest raport este 1: 1, cu 512 - 2: 1, cu 128 - 1: 2, restul este similar. Dacă acest parametru este setat pe un multiplu de 64, sunetul va fi anarmonic.
FM_a1 - intervalul de modulare a frecvenței la începutul unei note
256 corespunde unei game largi de armonice. Cu o scădere, tonul este mai curat, cu o creștere a armonicilor devine mai mult.
FM_a2 - modularea frecvenței de măturare la sfârșitul unei note
Principiul este același. Pentru majoritatea instrumentelor reale, armonicile se descompun mai repede decât tonul fundamental. Dacă faceți invers, sunete neobișnuite.
FM_dec - viteza de tranziție a intervalului de modulare a frecvenței de la cea setată de FM_a1 la cea setată de FM_a2
Principiul este același ca și pentru parametrii ADSR_a, ADSR_d și ADSR_r.
O frecvență PWM de 31.250 Hz este obținută prin împărțirea frecvenței de ceas (16 MHz) la 512. Programul este proiectat astfel încât evenimentele să fie legate de timp fără întreruperi. În schimb, este implicat un bit de preaplin cu cronometru Pentru ca programul să reușească să facă tot ceea ce i se cere, se folosesc numai numere întregi de 8 și 16 biți. Onda sinusoidală este prezentată sub forma unui tabel cu numere de 8 biți. Operațiunile auxiliare - citirea stărilor cheie, schimbarea instrumentelor virtuale, selectarea vocilor, calcularea parametrilor notelor care se modifică în timp - sunt distribuite între 15 proceduri, care necesită 0,48 ms pentru a fi finalizate. În acest moment, unele operații sunt efectuate cu o precizie de 32 biți, care este necesară pentru a multiplica două numere binare de 16 biți.
O undă sinusoidală simplă sună plictisitoare, deoarece nu există armonice în spectrul său. Sinteza FM vă permite să le primiți și să le schimbați spectrul în timp, simulând sunetul instrumentelor reale. Frecvențele multiple dau un sunet anharmonic care apare, de exemplu, în clopote. Dispozitivul imită bine schimbarea spectrului inerentă instrumentelor reale de-a lungul timpului, când unele armonice se descompun mai repede decât altele.