Al autor de Instructables bajo el apodo rgco se le ocurrió un sintetizador de cuatro voces y 1.5 octavas en Arduino Uno. A modo de comparación, los sintetizadores infantiles generalizados que difieren entre sí solo en diseño y fabricados por el mismo chip son de tres voces. Es cierto que pueden acompañar automáticamente la música con ritmo, memorizar melodías de una sola voz e imitar las voces de los animales. Pero entonces hecho en casa suena mejor Por qué
Se trata de los parámetros. Frecuencia de muestreo de 31 kHz, 9 bits, 4 voces, síntesis FM con barrido variable en el tiempo, envolvente ADSR, 12 instrumentos virtuales, 18 teclas que abarcan 1,5 octavas.
El maestro compone el circuito sintetizador en Fritzing:
En él, simula la ubicación de componentes en una placa de prueba de tipo placa de pruebas y las conexiones entre ellas:
Y recoge el esquema en la vida real:
Simplemente "verter y usar" es lo más simple que puede hacer con el diseño. 18 teclas (ANTES de la cuarta octava a FA quinta): para tocar, la decimonovena cambia los instrumentos virtuales en un anillo: piano, xilófono, guitarra, platillos, campanas, funky, vibrato, metal, violín, bajo, trompeta, acordeón. La naturaleza del sonido se ve afectada por la duración de las pulsaciones de teclas, pero no por el esfuerzo, a diferencia de los sintetizadores profesionales. Pero el desarrollador quiere que intentes programar tus herramientas virtuales también. Cada uno de ellos está dado por diez parámetros. El asistente le dice de qué parámetro depende.
ldness - volumen
Si este parámetro es inferior a 64, se excluyen la sobrecarga y las distorsiones relacionadas. Pero si programa un instrumento virtual de este tipo que no suena al volumen máximo durante mucho tiempo, el valor de este parámetro puede exceder 64, ya que las cuatro voces suenan simultáneamente con poca frecuencia.
pitch0 - cambio de tono
El rango corresponde a lo anterior, si establece este parámetro en 12. Disminuya los movimientos hacia abajo, aumente - hacia arriba. El cero corresponde a un desplazamiento hacia abajo exactamente una octava, 24 - hacia arriba exactamente una octava.
ADSR_a: velocidad de respuesta del volumen de cero a máximo
Cuanto más pequeño, más lento.Por ejemplo, 8192 corresponde a 4 ms, 256 a 128 ms.
ADSR_d: velocidad para disminuir el volumen del máximo al especificado por el parámetro ADSR_s.
El principio es el mismo.
ADSR_s: el valor al que disminuye el volumen cuando se presiona la tecla durante un tiempo prolongado
Por ejemplo, 256: el volumen permanece máximo todo el tiempo mientras se mantiene presionada la tecla. 192 - el volumen cae al 80 por ciento y permanece así mientras se mantiene presionada la tecla. 0: el volumen disminuye a cero, incluso si la tecla se mantiene presionada.
ADSR_r: velocidad para disminuir el volumen a cero después de soltar la tecla
El principio es el mismo que para los parámetros ADSR_a y ADSR_d.
FM_inc - relación de frecuencia de modulación a tono
Con un valor de 256, esta relación es 1: 1, con 512 - 2: 1, con 128 - 1: 2, el resto es similar. Si este parámetro se establece en un múltiplo de 64, el sonido será anarmónico.
FM_a1: el rango de modulación de frecuencia al comienzo de una nota
256 corresponde a una amplia gama de armónicos. Con una disminución, el tono es más limpio, con un aumento en los armónicos se vuelve más.
FM_a2 - modulación de frecuencia de barrido al final de una nota
El principio es el mismo. Para la mayoría de los instrumentos reales, los armónicos decaen más rápido que el tono fundamental. Si haces lo contrario, obtienes sonidos inusuales.
FM_dec: velocidad de transición del rango de modulación de frecuencia de la especificada por el parámetro FM_a1 a la especificada por el parámetro FM_a2
El principio es el mismo que para los parámetros ADSR_a, ADSR_d y ADSR_r.
Se obtiene una frecuencia PWM de 31,250 Hz dividiendo la frecuencia del reloj (16 MHz) por 512. El programa está diseñado de tal manera que los eventos están vinculados al tiempo sin interrupciones. En cambio, se trata de un bit de desbordamiento del temporizador. Para que el programa logre hacer todo lo que se requiere de él, solo se usan enteros de 8 y 16 bits de longitud. La onda sinusoidal se presenta en forma de una tabla de números de 8 bits. Las operaciones auxiliares (lectura de estados clave, cambio de instrumentos virtuales, selección de voces, cálculo de parámetros de notas que cambian en el tiempo) se distribuyen entre 15 procedimientos, que tardan 0,48 ms en completarse. En este momento, algunas operaciones se realizan con una precisión de 32 bits, que es necesaria para multiplicar dos números binarios de 16 bits.
Una simple onda sinusoidal suena aburrida porque no hay armónicos en su espectro. La síntesis FM le permite recibirlos y cambiar su espectro con el tiempo, simulando el sonido de instrumentos reales. Las frecuencias múltiples dan un sonido anarmónico que ocurre, por ejemplo, en campanas. El dispositivo imita bien el cambio de espectro inherente a los instrumentos reales a lo largo del tiempo, cuando algunos armónicos decaen más rápido que otros.