O autor de Instructables, sob o apelido rgco, criou um sintetizador de quatro vozes e 1,5 oitavas em Arduino Uno. Para comparação, os sintetizadores infantis difundidos que diferem entre si apenas no design e fabricados pelo mesmo chip são de três vozes. É verdade que eles podem acompanhar automaticamente a música com ritmo, memorizar melodias de uma voz e imitar as vozes dos animais. Mas então caseiro parece melhor. Porque
É tudo sobre os parâmetros. Frequência de amostragem 31 kHz, 9 bits, 4 vozes, síntese FM com varredura variável no tempo, envelope ADSR, 12 instrumentos virtuais, 18 teclas que abrangem 1,5 oitavas.
O mestre compõe o circuito do sintetizador em Fritzing:
Nele, simula a localização dos componentes em uma placa de ensaio do tipo placa de ensaio e as conexões entre eles:
E coleta o esquema na vida real:
Apenas "derramar e usar" é a coisa mais simples que você pode fazer com o design. 18 teclas (desde a quarta oitava até a quinta FA) - para tocar, o décimo nono alterna os instrumentos virtuais em um anel: piano, xilofone, violão, pratos, sinos, funky, vibrato, metal, violino, baixo, trompete, acordeão. A natureza do som é afetada pela duração das teclas, mas não pelo esforço, diferentemente dos sintetizadores profissionais. Mas o desenvolvedor quer que você tente programar suas ferramentas virtuais também. Cada um deles é dado por dez parâmetros. O assistente informa em que parâmetro ele depende.
ldness - volume
Se esse parâmetro for menor que 64, a sobrecarga e as distorções relacionadas serão excluídas. Mas se você programar um instrumento virtual que não soa no volume máximo por muito tempo, o valor desse parâmetro pode exceder 64, pois as quatro vozes simultaneamente não são ouvidas com frequência.
pitch0 - mudança de pitch
O intervalo corresponde ao acima, se você definir este parâmetro como 12. A diminuição diminui, aumenta - se. Zero corresponde a um deslocamento para baixo exatamente uma oitava, 24 - para cima exatamente uma oitava.
ADSR_a - taxa de variação de volume de zero a máxima
Quanto menor, mais lento.Por exemplo, 8192 corresponde a 4 ms, 256 a 128 ms.
ADSR_d - velocidade para diminuir o volume do máximo para o especificado pelo parâmetro ADSR_s.
O princípio é o mesmo.
ADSR_s - o valor em que o volume diminui quando a tecla é pressionada por um longo tempo
Por exemplo, 256 - o volume permanece máximo o tempo todo enquanto a tecla é pressionada. 192 - o volume cai para 80% e permanece assim enquanto a tecla é mantida pressionada. 0 - o volume diminui para zero, mesmo que a tecla seja mantida pressionada.
ADSR_r - velocidade para diminuir o volume para zero após soltar a tecla
O princípio é o mesmo que para os parâmetros ADSR_a e ADSR_d.
FM_inc - razão entre a frequência de modulação e o tom
Com um valor de 256, essa proporção é 1: 1, com 512-2: 1, com 128-1: 2, o resto é por analogia. Se esse parâmetro for definido como múltiplo de 64, o som será anarmônico.
FM_a1 - a faixa de modulação de frequência no início de uma nota
256 corresponde a uma ampla gama de harmônicos. Com uma diminuição, o tom fica mais limpo, com o aumento dos harmônicos, torna-se mais.
FM_a2 - modulação de frequência de varredura no final de uma nota
O princípio é o mesmo. Para a maioria dos instrumentos reais, os harmônicos decaem mais rapidamente do que o tom fundamental. Se você faz o oposto, obtém sons incomuns.
FM_dec - velocidade de transição da faixa de modulação de frequência da definida por FM_a1 para a definida por FM_a2
O princípio é o mesmo que para os parâmetros ADSR_a, ADSR_d e ADSR_r.
Uma frequência PWM de 31.250 Hz é obtida dividindo a frequência do relógio (16 MHz) por 512. O programa é projetado de tal maneira que os eventos são limitados no tempo sem interrupções. Em vez disso, um bit de estouro de timer está envolvido. Para que o programa consiga fazer tudo o que é necessário, apenas números inteiros de 8 e 16 bits de comprimento são usados. A onda senoidal é apresentada na forma de uma tabela de números de 8 bits. As operações auxiliares - lendo os principais estados, alterando instrumentos virtuais, selecionando vozes, calculando os parâmetros das notas que mudam no tempo - são distribuídas entre 15 procedimentos, que levam 0,48 ms ao total. No momento, algumas operações são executadas com precisão de 32 bits, necessária para multiplicar dois números binários de 16 bits.
Uma simples onda senoidal parece monótona porque não há harmônicos em seu espectro. A síntese FM permite recebê-los e alterar seu espectro ao longo do tempo, simulando o som de instrumentos reais. Múltiplas frequências emitem um som anarmônico que ocorre, por exemplo, nos sinos. O dispositivo imita bem a mudança no espectro inerente aos instrumentos reais ao longo do tempo, quando alguns harmônicos decaem mais rapidamente que outros.