Con los microcontroladores (MCUs) volviéndose cada vez más potentes, era solo cuestión de tiempo antes de que permitieran tareas de procesamiento de audio mucho más serias. El proyecto de Danilo Gabriel, la biblioteca ESP32Synth es un buen ejemplo de esto, la cual proporciona un motor de mezcla y síntesis de más de 80 voces basado en ESP-IDF. Si alguna vez quisiste crear un sintetizador de audio bastante impresionante, entonces todo lo que realmente necesitas para comenzar es un ESP32, ESP32-S3 o un MCU de Espressif de doble núcleo similar que tenga la potencia de procesamiento requerida.

La salida de audio se realiza a través de I2S, requiriendo solo que se conecte un DAC I2S económico como el UDA1334A o el PCM5102, a menos que realmente desees utilizar el DAC interno. Con esto cableado, obtienes 80 voces por defecto, habiéndose demostrado hasta 350 voces antes de que el hardware ya no pueda seguir el ritmo. Puedes transmitir múltiples archivos WAV desde una tarjeta SD para usar como muestras, junto con los osciladores típicos como onda sinusoidal, triangular, diente de sierra y de pulso, así como ruido, tablas de ondas (wavetables) y más.

Para hacer que esto funcione en tiempo real, se tuvieron que realizar una serie de optimizaciones, como la eliminación de las lentas operaciones de punto flotante y división en la ruta de audio. La tarea de renderizado de audio está naturalmente fijada a un solo núcleo, dejando el otro núcleo libre para que el código de la aplicación lo utilice en las tareas restantes. Aunque el código se proporciona como un proyecto de Arduino, utiliza ESP-IDF por dentro, por lo que es muy probable que también pueda usarse para un proyecto regular de ESP-IDF sin demasiado alboroto.

Vía Hackaday.