L'autore di Instructables con il soprannome rgco ha inventato un sintetizzatore a quattro voci da 1,5 ottave su Arduino Uno. Per fare un confronto, i sintetizzatori per bambini diffusi che differiscono l'uno dall'altro solo nel design e realizzati dallo stesso chip sono a tre voci. È vero, possono accompagnare automaticamente la musica con ritmo, memorizzare melodie ad una voce e imitare le voci degli animali. Ma allora prodotto fatto in casa sembra più bello. Perché?
Riguarda i parametri. Frequenza di campionamento 31 kHz, 9 bit, 4 voci, sintesi FM con scansione variabile nel tempo, inviluppo ADSR, 12 strumenti virtuali, 18 tasti su 1,5 ottave.
Il master compone il circuito sintetizzatore in Fritzing:
In esso, simula la posizione dei componenti su una breadboard tipo breadboard e le connessioni tra di loro:
E raccoglie lo schema nella vita reale:
Basta "versare e usare" è la cosa più semplice che puoi fare con il design. 18 tasti (da PRIMA della quarta ottava a FA quinta) - per suonare, il diciannovesimo commuta strumenti virtuali in un anello: piano, xilofono, chitarra, dulcimer, campane, funky, vibrato, metal, violino, basso, tromba, fisarmonica. La natura del suono è influenzata dalla durata dei tasti, ma non dallo sforzo, a differenza dei sintetizzatori professionali. Ma lo sviluppatore vuole che tu provi a programmare anche i tuoi strumenti virtuali. Ognuno di essi è dato da dieci parametri. La procedura guidata indica da quale parametro dipende.
ldness - volume
Se questo parametro è inferiore a 64, vengono esclusi sovraccarico e relative distorsioni. Ma se programmate uno strumento così virtuale che non suona al massimo volume a lungo, il valore di questo parametro può superare 64, poiché tutte e quattro le voci suonano contemporaneamente raramente.
pitch0 - pitch shift
L'intervallo corrisponde a quanto sopra, se si imposta questo parametro su 12. Diminuisci mosse verso il basso, aumenta - su. Lo zero corrisponde a uno spostamento esattamente di un'ottava, 24 - esattamente di un'ottava.
ADSR_a - velocità di variazione del volume da zero al massimo
Più piccolo, più lento.Ad esempio, 8192 corrisponde a 4 ms, da 256 a 128 ms.
ADSR_d: velocità per ridurre il volume dal massimo a quello specificato dal parametro ADSR_s.
Il principio è lo stesso.
ADSR_s - il valore al quale il volume diminuisce quando il tasto viene premuto a lungo
Ad esempio, 256: il volume rimane sempre massimo mentre si tiene premuto il tasto. 192 - il volume scende all'80% e rimane tale mentre si tiene premuto il tasto. 0 - il volume diminuisce a zero, anche se si tiene premuto il tasto.
ADSR_r - velocità per ridurre il volume a zero dopo aver rilasciato il tasto
Il principio è lo stesso dei parametri ADSR_a e ADSR_d.
FM_inc - rapporto tra frequenza di modulazione e tono
Con un valore di 256, questo rapporto risulta essere 1: 1, con 512 - 2: 1, con 128 - 1: 2, il resto è per analogia. Se questo parametro è impostato su un multiplo di 64, il suono sarà anarmonico.
FM_a1 - l'intervallo di modulazione di frequenza all'inizio di una nota
256 corrisponde a una vasta gamma di armoniche. Con una diminuzione, il tono è più pulito, con un aumento delle armoniche diventa di più.
FM_a2 - modulazione della frequenza di sweep alla fine di una nota
Il principio è lo stesso. Per la maggior parte degli strumenti reali, le armoniche decadono più velocemente del tono fondamentale. Se fai il contrario, ottieni suoni insoliti.
FM_dec - velocità di transizione della gamma di modulazione di frequenza da quella impostata da FM_a1 a quella impostata da FM_a2
Il principio è lo stesso dei parametri ADSR_a, ADSR_d e ADSR_r.
Una frequenza PWM di 31.250 Hz si ottiene dividendo la frequenza di clock (16 MHz) per 512. Il programma è progettato in modo tale che gli eventi siano collegati al tempo senza interruzioni. Invece, è coinvolto un bit di overflow del timer. Affinché il programma riesca a fare tutto ciò che è richiesto, vengono utilizzati solo numeri interi di 8 e 16 bit di lunghezza. L'onda sinusoidale è presentata sotto forma di una tabella di numeri a 8 bit. Le operazioni accessorie - lettura degli stati chiave, modifica degli strumenti virtuali, selezione delle voci, calcolo dei parametri delle note che cambiano nel tempo - sono distribuite tra 15 procedure, che richiedono 0,48 ms per il completamento. Al momento, alcune operazioni vengono eseguite con precisione a 32 bit, necessaria per moltiplicare due numeri binari a 16 bit.
Una semplice onda sinusoidale sembra noiosa perché non ci sono armoniche nel suo spettro. La sintesi FM ti consente di riceverli e di modificarne lo spettro nel tempo, simulando il suono di strumenti reali. Le frequenze multiple danno un suono anarmonico che si verifica, ad esempio, nelle campane. Il dispositivo imita bene il cambiamento di spettro inerente agli strumenti reali nel tempo, quando alcune armoniche decadono più velocemente di altre.