Az rucco becenév alatt levő Instructables szerzője négyhangú 1,5 oktávos szintetizátorral jött létre Arduino Uno. Összehasonlításképpen: a széles körben elterjedt gyermek-szintetizátorok, amelyek csak formatervezésben különböznek egymástól és ugyanabból a chipekből készülnek, háromhangúak. Igaz, hogy automatikusan kísérik a zenét ritmussal, megjegyzik egyhangú dallamokat és utánozzák az állatok hangját. De akkor Házitermékek szépen hangzik. Miért?
A paraméterekről szól. Mintavételi frekvencia 31 kHz, 9 bit, 4 hang, FM szintézis időben változó sávval, ADSR boríték, 12 virtuális eszköz, 18 gomb, 1,5 oktáv átmérőjű.
A mester összeállítja a szintetizátor áramkört Fritzingben:
Ebben szimulálja az alkatrészek elhelyezkedését a kenyérlemez típusú kenyérlapon és a közöttük lévő kapcsolatokat:
És összegyűjti a sémát a valós életben:
Csak az „öntsd és használd” a legegyszerűbb dolog, amit megtehetsz a tervezéssel. 18 gomb (ELŐTT a negyedik oktávtól az ötödik FA-ig) - lejátszáshoz a kilencedik virtuális hangszereket kapcsol gyűrűvel: zongora, xilofon, gitár, dulcimer, harangok, funky, vibrato, fém, hegedű, basszus, trombita, harmonika. A hang jellegét befolyásolja a gombnyomások időtartama, de a professzionális szintetizátorokkal ellentétben az erőfeszítés nem. De a fejlesztő azt akarja, hogy kipróbálja a virtuális eszközöket is. Mindegyiket tíz paraméter adja meg. A varázsló megmondja, hogy milyen paramétertől függ.
ldness - térfogat
Ha ez a paraméter kevesebb, mint 64, akkor a túlterhelés és a kapcsolódó torzulások ki vannak zárva. De ha olyan virtuális műszert programoz be, amely hosszú ideig nem hangzik a maximális hangerőn, akkor ennek a paraméternek az értéke meghaladhatja a 64-et, mivel mind a négy hang egyszerre ritkán szól.
pitch0 - hangmagasság-eltolás
A tartomány megfelel a fentieknek, ha ezt a paramétert 12-re állítja. Csökkentés mozog lefelé, növeli - fel. A nulla pontosan egy oktáv lefelé, 24 - pontosan egy oktávval felfelé történő eltolódásának felel meg.
ADSR_a - a hangerő csökkentése nullától a maximálisig
Minél kisebb, annál lassabb.Például, 8192 megfelel 4 ms-nak, 256 - 128 ms-nak.
ADSR_d - sebesség a hangerő csökkentésére az ADSR_s paraméter által megadott maximálisról.
Az elv ugyanaz.
ADSR_s - az az érték, amelyre a hangerő csökken, ha a gombot hosszú ideig megnyomják
Például 256 - a hangerő egész idő alatt maximális marad, miközben a gombot tartja. 192 - a hangerő 80 százalékra esik és így marad, miközben a gombot tartja lenyomva. 0 - a hangerő nullára csökken, még akkor is, ha a gombot lenyomva tartják.
ADSR_r - sebesség a hangerő nullára csökkentéséhez a kulcs elengedése után
Az elv megegyezik az ADSR_a és ADSR_d paraméterekkel.
FM_inc - a modulációs frekvencia és a hang aránya
A 256 értéknél ez az arány 1: 1, 512 - 2: 1, 128 - 1: 2, a többi analógia alapján történik. Ha ezt a paramétert 64-es szorzóra állítja, akkor a hang anharmonikus lesz.
FM_a1 - a frekvencia moduláció tartománya egy hang elején
A 256 a harmonikák széles skálájának felel meg. A csökkenéssel a hang tisztább, a harmonikusok növekedésével pedig egyre inkább.
FM_a2 - söpörési frekvencia moduláció egy jegyzet végén
Az elv ugyanaz. A legtöbb valódi hangszernél a harmonikus hangok gyorsabban bomlanak le, mint az alaphang. Ha éppen ellenkezőleg cselekszik, szokatlan hangokat kap.
FM_dec - az FM_a1 által beállított és az FM_a2 által beállított frekvenciamodulációs tartomány átmeneti sebessége
Az elv megegyezik az ADSR_a, ADSR_d és ADSR_r paraméterekkel.
A 31 250 Hz PWM frekvenciát úgy kapjuk, hogy az órafrekvenciát (16 MHz) 512-el osztjuk. A programot úgy tervezték, hogy az események megszakítás nélkül az időhez kapcsolódjanak. Ehelyett egy időzítő túlcsordulási bitre van szükség. Annak érdekében, hogy a program mindent megtehessen, amire szükség van, csak 8 és 16 bit hosszú egész értékeket használunk. A szinuszhullámot 8 bites számú táblázat formájában mutatjuk be. A kiegészítő műveletek - a kulcsállapotok leolvasása, a virtuális eszközök megváltoztatása, a hangok kiválasztása, az időben változó jegyzetek paramétereinek kiszámítása - 15 eljárás között oszlanak meg, amelyek elvégzése 0,48 ms-t igényel. Ebben az időben néhány műveletet 32 bites pontossággal hajtanak végre, ami szükséges a két 16 bites bináris szám szorzásához.
Az egyszerű szinuszhullám tompanak hangzik, mert spektrumában nincsenek harmonikusok. Az FM szintézis lehetővé teszi azok fogadását és az idővel megváltoztatni a spektrumukat, szimulálva a valódi hangok hangját. Több frekvencia anharmonikus hangot ad, amely például a harangokban fordul elő. A készülék jól utánozza a valódi hangszerekre jellemző spektrumváltozást az idő múlásával, amikor egyes harmonikusok gyorsabban bomlanak le, mint mások.