Universitat Oberta de Catalunya

Creación de un instrumento musical interactivo: MIDI Hero.

Asignatura: Diseño de interacción
Grado: Multimedia
Nombre del estudiante: Alfonso Gustavo Chico Fernández de Terán
Consultor y profesor: Santiago Vilanova Angeles y Quelic Berga Carreras

Introducción

El proyecto surgió a partir de la petición, que en parte era un reto, de una profesora de música compañera de trabajo: crear un sistema musical interactivo que permitiese participar en un concierto a alguien del público (sin formación musical) interpretando una pieza junto a los demás músicos en directo. Debía ser, por tanto, un sistema sencillo, funcional y divertido. 

A partir de este planteamiento consideré que lo más importante era simplificar la interacción. Así, pensé en un sistema en el que la persona usuaria interactúa con su movimiento tocando rectángulos que se desplazan por la pantalla al ritmo de la música; la altura y la intensidad de las notas que producen estarían predeterminadas, de modo que la persona tan solo influye en el momento en el que empiezan a sonar (al tocar los rectángulos) o dejan de hacerlo (al dejar de tocarlos). Sería una mezcla entre V Motion Project (salvando las distancias) y Guitar Hero. El resultado final fue el siguiente:

Como se ve, la principal técnica de interacción utilizada es la visión artificial: por medio de una Kinect y Processing con Open CV se captan la silueta del usuario y las colisiones con los rectángulos y también se hace sonar un sintetizador virtual.

Etapas y retos

Tras concebir el sistema que había que desarrollar comencé el proceso de documentación y búsqueda de las librerías necesarias para llevarlo a cabo. Debía resolver varias cuestiones: por un lado, las relacionadas con la visión artificial (cómo detectar los movimientos del usuario y las colisiones y cómo eliminar el fondo); por el otro, las relacionadas con la parte musical (cómo saber qué notas deben sonar y cómo sincronizarlas con el acompañamiento y los demás músicos). 

Empecé con la visión artificial. En un primer momento pensé en utilizar la librería SimpleOpenNI, que permite detectar de forma automática a la persona (o las personas) que se ponen frente a la Kinect y que, además, permite conocer las coordenadas en pantalla de las principales partes de su cuerpo (la cabeza, las manos, los hombros, etc.). Esta librería facilitaba también la eliminación del fondo y la detección del movimiento.

Sin embargo, no tardé en toparme con problemas: estas funcionalidades extras no presentaban un comportamiento fluido y, además, tenían un coste de procesamiento, que se manifestaba en forma de retrasos. Resultaban, en consecuencia, inviables para el proyecto, que requería de una respuesta casi en tiempo real para poder hacer música.

Pruebas de rendimiento con SimpleOpenNI.

Así, tuve que buscar otra solución: programar mi propio sistema de detección de usuario. Utilizando otra librería, Open Kinect, podía obtener de manera rápida y fluida una imagen en la que cada píxel tenía, además de su ubicación en los ejes x e y, información sobre su profundidad, de modo que podía generar una imagen tomando tan solo los píxeles que estaban a una distancia determinada de la cámara, con lo que se descartaban los objetos del fondo y del primer plano. 

Después, procesando la imagen con distintos procedimientos (dilatándola y erosionándola para eliminar el ruido y desenfocándola para suavizar los bordes) era fácil obtener los contornos existentes con otra librería llamada OpenCV. Finalmente, y si no había ningún obstáculo entre el usuario y la cámara, seleccionando el contorno más grande se obtenía la silueta del usuario. 

Por otra parte, y con objeto de minimizar el tiempo de procesamiento, opté también por programar un sistema de detección de colisiones que solo considerase los píxeles del lado del rectángulo más cercano a la silueta. Desarrollé algunos prototipos, como un piano MIDI para probar el sistema:

Prototipo de prueba, piano MIDI.

Por último, me tocó resolver la parte musical del sistema. Inicialmente intenté utilizar alguna librería capaz de leer archivos MIDI, que es una forma de codificar información musical. Sin embargo, el sistema era muy complicado de implementar, puesto que había que crear una interfaz para cargar y reproducir el archivo, seleccionar la pista, el instrumento, el tempo, etc., y menos flexible porque no podían sincronizarse proyectos que incluyesen MIDI y audio, por ejemplo. 

Decidí, por tanto, usar una estación de trabajo de audio digital (DAW, por sus siglas en inglés), que es un programa que permite grabar y sincronizar datos MIDI y datos de sonido como fuente de los datos musicales. El DAW reproduciría tanto el acompañamiento del tema que fuera a interpretarse como las notas que tocaría el usuario, enviando los datos MIDI a Processing; este, por medio de una librería llamada The MidiBus, lee los datos MIDI y se encarga de generar y sincronizar la visualización de los rectángulos que representan cada nota en virtud de los datos obtenidos. Asimismo, manda la información de altura asociada a cada rectángulo a un sintetizador cuando se produce una colisión entre la silueta del usuario y dicho rectángulo. 

El sistema final cuenta, por consiguiente, con cuatro elementos: el DAW, el programa de Processing, la cámara Kinect y el sintetizador que hace sonar el usuario.

Sistema final.

Conclusiones

Estoy muy satisfecho con el sistema interactivo diseñado. Es posible utilizarlo con cualquier DAW y archivo MIDI y la usabilidad es muy buena: puede adaptarse a las condiciones morfológicas y de iluminación de un escenario y tiene una respuesta muy rápida y fluida que creo que me permitirá utilizarlo en directo sin demasiados problemas.

También ofrece más posibilidades que las mostradas en el vídeo; por ejemplo, pueden utilizarse timbres e instrumentos distintos en la misma pieza, transmitiendo varias pistas por canales MIDI diferentes, de forma que se alternen los sonidos o incluso se hagan sonar al mismo tiempo (uno con cada mano). Visualmente también admite muchas mejoras, puesto que permite personalizar la apariencia de la interfaz en función del tema que se interprete, aunque para este prototipo se ha optado por simplificar visualmente la pantalla para no confundir al usuario.

Enlaces relacionados:

Deja un comentario