| Placa montada y funcionando. |
domingo, 20 de mayo de 2012
PCB
Tras acabar realizamos una placa PCB con el hardware empleado, el resultado es el siguiente:
Interfaz gráfica completa: Arduino Synth
Ya tenemos todos los elementos necesarios en nuestro programa y sólo queda aglutinarlos en una única interfaz integrada por todos los módulos mostrados hasta ahora. Para ello hemos diseñado una GUI escalable, fácil de usar y lo más intuitiva posible para poder utilizarla sin dificultades.
En ella se pueden observar los distintos módulos del programa:
![]() |
| Arduino Synth - GUI |
- Módulo de comunicación con Arduino (arriba izquierda) Controla la comunicación con el microcontrolador, permite abrir y cerrar conexión con él, activar el Active Sensing y el parseado de instrucciones MIDI, y además activa y desactiva la computación de audio en el Pure Data.
- Módulo de visualización/comunicación con la Matriz LED (arriba centro) Se trata del módulo de comunicación explicado en el apartado anterior.
- Display de mensajes MIDI (arriba derecha) En este display se visualizan las instrucciones MIDI que llegan del Arduino, cuyos bytes han sido parseados para hacerlos inteligibles (gracias al módulo printMidi)
- Visualización de energías y audio final (debajo de los tres anteriores) Aquí se recoge todo el audio generado en el programa y se envía por el puerto de salida para ser reproducido por la salida de audio del sistema. Se presenta la señal por pantalla y se calcula la energía en 8 bandas de frecuencia, preparando los valores para ser enviados al módulo de comunicación con la matriz LED.
- Arpeggiator (debajo del anterior) Explicado en el apartado siguiente.
- Módulo de síntesis FM (abajo izquierda) Nuestro primer sintetizador polifónico. Con presets añadidos y reverberación.
- Reproductor de audio (abajo centro) Reproduce archivos de audio. Contiene controles estándar de reproducción, volumen, posición de la canción, control de velocidad de reproducción y reverb.
- Módulo de redirección MIDI para programas externos (abajo derecha) Redirige la información MIDI a un bus virtual del sistema para ser utilizada por otros programas.
Arpeggiator: una mejora del software
Además de construir un sistema básico completamente funcional, hemos querido añadir una mejora a nuestro diseño para hacer de él un programa más sólido y añadir una herramienta muy útil a la hora de componer música y efectos especiales.
Un arpegiador es un dispositivo que captura las notas tocadas por un controlador MIDI y lanza secuencias de notas en función de las teclas pulsadas. Por ejemplo, si tocáramos un acorde el arpegiador podría separar las notas de ese acorde y tocarlas secuencialmente, una detrás de otra (arpegio). O lanzar rápidamente escalas a partir de esas notas para crear efectos de sonido. O crear sonidos “colchón” que se mantengan a lo largo de la canción sobre los que poder tocar otros instrumentos.
![]() |
| 'as_arpeggiator' |
Posee una línea temporal, que se encarga de generar los nuevos mensajes MIDI a la velocidad deseada. En los paneles inferiores se puede modular la frecuencia y la intensidad de estas nuevas instrucciones, así como cambiar la velocidad a la que se generan y otras opciones mediante el resto de la interfaz.
Subsistema de visualización. Comunicación con la Matriz LED
Finalmente, ahora que tenemos toda la información MIDI y de audio (de energía de la señal) disponible, necesitamos transmitirle al Arduino las instrucciones necesarias para generar los patrones luminosos que deseemos en la matriz de LEDs. Utilizando el patch ‘as_ledMatrix’ tenemos una interfaz mediante la cual activamos diversas funciones que hemos incorporado en el microcontrolador:
- ON/OFF Apagamos o encendemos la matriz de LEDs activando y desactivando este botón.
- Selección de modo Con estos 4 pulsadores podemos elegir cualquiera de los distintos modos de visualización. Los cuatro están explicados en el apartado de hardware, y son: EQ (SpectrumVisualization, muestra la energía por bandas de la señal), AudioRhythm (AudioRhythmicVisualization, crea patrones de iluminación en función de la información MIDI entrante), Random (PopVisualization, enciende luces posicionadas aleatoriamente en la matriz en función del número de notas tocadas en un intervalo de tiempo), y Demo (ShowcaseVisualization, muestra una serie de imágenes de demostración).
- Asignación de canales MIDI a canales de visualización En el lateral izquierdo del módulo se asignan los canales MIDI deseados a los 4 canales de iluminación que controlan la visualización audiorítmica. A su vez, pueden activarse y desactivarse independientemente.
- Para la EQ, lo que se envían son los paquetes de 8 bytes que contienen la energía de cada una de las bandas + 1 byte con la energía total de la señal.
- Para la AudioRhythm se envía la información de nota e intensidad de las instrucciones NoteON de los canales MIDI asignados a cada uno de los canales de iluminación.
- Para la Random se envían números aleatorios entre 1 y 17 cuando llega un mensaje MIDI de NoteON
- Para la Demo, no se envía nada.
Recolección de audio y cálculo de energía de la señal
Ahora que ya hemos construido todos los módulos de generación de sonido, pasamos a operar con toda la información que tenemos disponible de las instrucciones MIDI y del audio generado para crear una serie de visualizaciones, las cuales serán posteriormente representadas en la matriz de LEDs.
En primer lugar, queremos coger todo el audio generado en el programa o en los sintetizadores externos y mezclarlo, sumar todos los canales. De esta forma ya tenemos en un sólo flujo de audio estéreo todos los sonidos producidos y podemos operar con él.
Para mostrar la energía por bandas de la señal introducimos la señal ya mezclada en el módulo de visualización de energías que se encuentra en el patch ‘as_energyDisplayPanel.pd’.
En este módulo se realizan 3 tareas diferentes:
- Envío del audio final al DAC del ordenador Es en este módulo donde enviamos la suma de todos los canales de audio existentes en el programa a la salida de audio del Pure Data, que conectamos por defecto a la salida de audio del sistema.
- Representación de la señal de audio Además, se dibuja en pantalla la señal de audio en el tiempo.
- Visualización de la energía por bandas Por último, y empalmando con el envío de datos a la matriz LED, se calcula la energía de la señal en 16 bandas de frecuencia diferentes utilizando un banco de filtros paso banda.
En cuanto a la visualización de energía, se pasa la señal a través de 16 filtros paso banda de 2º orden centrados en 25, 40, 63, 100, 160, 250, 380, 550, 790, 1k, 1.6k, 2.5k, 4k, 6.3k, 10k, y 16kHz. Su ancho de banda se expresa en octavas respecto de la frecuencia central, siendo el valor 100 equivalente a una octava. Nuestros filtros están configurados con un valor de 20, es decir, 1/5 de octava.
![]() |
| 8 primeros filtros |
A estos valores se les aplica una función de transferencia con el objetivo de ajustar los diferentes valores a la cantidad de LEDs que deben encenderse en cada caso y se restringe su valor entre 0 y 199 (por especificación del protocolo que hemos diseñado para comunicarnos con el micro).
Los datos generados por los filtros se muestran por pantalla utilizando una serie de vúmetros individuales. Y, por último, una vez obtenidos, los 8 bytes que contienen esos valores se empaquetan en un mensaje y se envían cada 50 milisegundos al último módulo del programa, el subsistema de visualización. Este es el encargado de hacer llegar al Arduino toda la información que queremos ver en la matriz LED.
Suscribirse a:
Entradas (Atom)



