viernes, 16 de marzo de 2012

Pure Data e interacción con eventos MIDI

Ahora tenemos resuelto el paso de instrucciones MIDI al ordenador mediante nuestro programa cargado en el Arduino. Recibimos los eventos generados por un controlador por la UART1 a velocidad MIDI (31250 baudios) y los reenviamos por la UART0 a velocidad estándar de PC (57600 baudios).

Comenzamos a analizar los datos utilizando el lenguaje de programación visual Pure Data. Con él somos capaces de abrir una conexión con el Arduino gracias a un conjunto de librerías que crean un objeto virtual 'ardsynth'. Este objeto representa nuestra placa y nos permite abrir una comunicación serie con ella para recibir las instrucciones que le manda el controlador.

Arduino.pd

El plug-in de Pure Data que crea la interfaz software para la comunicación con el Arduino es Pduino (Arduino: Interfacing with software). Incluye dos programas de prueba y una clase principal llamada "arduino.pd" que es la que nos permite crear el puerto de comunicación.

Para llegar a nuestro objetivo hemos tenido que rediseñar esta clase, renombrada como 'ardsynth.pd'.

Los cambios que hemos introducido han sido:
  • Eliminamos la opción de obtener la versión de firmware de la placa (para simplificar)
  • Rediseñamos la manera de empaquetar los bytes que llegan del Arduino en eventos MIDI
En cuanto al empaquetamiento, que es el cambio más profundo, tenemos:
  • Cambios en el subpatch 'make lists', encargado de empaquetar los bytes entrantes. Hemos añadido soporte para Running Status, técnica incluida en la especificación MIDI que minimiza el número de bytes que envía el controlador para reducir latencia (y necesaria para que la mayor parte de instrumentos MIDI comerciales funcionen).
'pd make lists'
  • Cambios en el subpatch 'set message length'. Añadimos soporte para todo tipo de bytes de estado (comandos MIDI) y una segunda salida para obtener la longitud de bytes de estado implícitos (running status).
'pd set message length'

Lo que acabamos de hacer es ordenar los bytes que llegan de nuestro controlador a través del Arduino en tramas MIDI que se generan en el PureData como mensajes de 1, 2 o 3 números (1, 2 o 3 bytes).

Problemas y dificultades

En este punto del proyecto estamos tomando contacto con el lenguaje y algunos aspectos no nos quedan claros del todo.

A la hora de programar, hemos tenido bastantes problemas implementando el submódulo de running status. Como el Pduino ya traía un módulo de empaquetamiento (el pd make lists), decidimos construir el nuestro a partir de él en vez de implementarlo desde cero, con el añadido problema de tener que adaptar nuestro código a lo que ya estaba hecho. Esto restringía y condicionaba la implementación del running a lo que ya teníamos disponible.

Todavía no tenemos claro del todo cómo vamos a ordenar las distintas partes del software, pero empezaremos a pensar en el diseño para las próximas entradas del blog.

No hay comentarios:

Publicar un comentario