9.2. El protocolo MIDI

MIDI (Musical Instruments Digital interface) es un sistema de comunicación entre instrumentos musicales digitales, creado en 1983 a partir de una asociación formada por fabricantes (MIDI Manufacturers Association). Entre los instrumentos MIDI más utilizados encontramos teclados (órganos, sintetizadores), guitarras, baterías, acordeones, instrumentos de viento y módulos de producción de sonido.

Cada instrumento posee una interfaz incorporada, cuyas especificaciones están detalladas en la norma MIDI. Los fabricantes de instrumentos deben seguir esas especificaciones para que sus instrumentos puedan comunicarse con instrumentos de otras marcas.

Conectando la salida de un instrumento con la entrada de otro, podemos lograr que lo que se interpreta en el primer instrumento sea reproducido por el segundo. El instrumento en el que tocamos es, a veces, llamado controlador, pues, no es el que produce el sonido directamente, sino que envía datos a otros generadores del sonido.

La interfaz MIDI consta de tres puertos: IN, OUT y THRU:
• Por IN entran los datos provenientes de otros dispositivos MIDI.
• Por OUT salen los mensajes generados por el propio dispositivo.
• El THRU está conectado con el IN, internamente, y sirve para dar salida hacia otros dispositivos a los mensajes que arriban al IN.

G.9.1. Conexión MIDI

 

Un instrumento funciona como maestro y el otro como esclavo. El primero transmite mensajes relacionados con las operaciones que sobre él se practican, por ejemplo, bajar una tecla, cambiar el tipo de sonido (piano, guitarra, etc.), modificar el volumen. El esclavo recibe estos mensajes y realiza las mismas operaciones que el maestro (ver G.9.1.).

También es posible conectar una computadora a través de MIDI. Para esto es necesario colocarle una interfaz para computadoras y conectarla a los instrumentos empleando cables MIDI. G.9.2. muestra un tipo de configuración posible.

G.9.2. Conexión MIDI

 

La función de la computadora es capturar los mensajes que viajan por la línea, con la posibilidad de almacenarlos y, más tarde, poder editarlos y/o reproducirlos. Es importante aclarar que en este caso la computadora no graba el sonido mismo, sino tan solo una sucesión de órdenes que envía el instrumento mientras se lo ejecuta, concretamente qué notas se ejecutaron, con qué intensidad, en qué momento. Luego, la computadora puede reenviarlos al instrumento para que este interprete automáticamente.

En algún sentido, el sistema se parece a una pianola. Cuando el pianista toca sus teclas, en el rollo se inscriben mensajes que indican cuándo se tocó una nota, qué notas se tocaron, a qué intensidad, cuánto dura cada nota, cuál es el tempo de la música. Luego, la pianola puede leer la información del rollo y ejecutar la música sin la presencia del músico. Resulta obvio que en el papel quedaron registradas las acciones del pianista, pero no el sonido del piano, y esto nos lleva a pensar las diferencias entre MIDI y audio digital.

Un archivo MIDI contiene información sobre cómo interpretar una música, como si se tratara de una partitura. Un archivo de audio digital contiene una forma de onda, a la música grabada.

 

La ventaja principal de MIDI es que la cantidad de información necesaria para interpretar la música es muy pequeña (comparada con la misma música registrada digitalmente). Esto permite almacenarla y transmitirla con facilidad y, además, procesar los mensajes en tiempo real, aun con una bajísima capacidad de procesamiento de datos. Pero la principal desventaja es que se hacen necesarios los instrumentos musicales electrónicos que reciban los mensajes MIDI y los conviertan en sonido y música.

9.2.1. Canales MIDI

Existen 16 canales MIDI y en la mayoría de los mensajes es necesario especificar un número de canal. Esto permite que los dispositivos que reciben la información puedan configurarse para recibir parte de toda la información que se transmite a través de la conexión. Supongamos que un instrumento musical que funciona como esclavo está configurado para recibir solamente lo que se transmite por el canal 1, en este caso, todos los mensajes que no pertenezcan a ese canal serán ignorados por el instrumento.

La división de la información por canales resulta muy útil cuando se envían mensajes desde una computadora. Si un tema musical está conformado por una parte a cargo de piano, por ejemplo, y otra a cargo de una flauta, los mensajes a cada uno de estos instrumentos deberán ser enviados por canales MIDI diferentes. De este modo, el instrumento electrónico que recibe los datos podrá discriminar qué notas asignar al piano que hay en él y qué notas derivar a la flauta. Vale aclarar que un mismo instrumento electrónico (un órgano o sintetizador) puede imitar varios instrumentos al mismo tiempo. La cantidad de instrumentos a imitar simultáneamente es en general 16, cifra que coincide con la cantidad total de canales MIDI.

G.9.3. Conexión MIDI

 

9.2.2. Los archivos .MID

Los archivos MIDI son generados y reproducidos con programas denominados secuenciadores (Sonar, Cubase, etc.). Cada programa graba un formato de archivo propio, como ocurre con cualquier procesador de texto, por ejemplo. Con el objeto de unificar el formato, los creadores de la norma MIDI diseñaron un tipo de archivo intercambiable entre programas, denominado MIDI Standard File, cuya extensión es .mid.

9.2.3. General MIDI

Antes de que la norma MIDI incorporara el concepto General MIDI, los fabricantes de instrumentos electrónicos incluían diversos “timbres”, como piano, guitarra o violín, que ordenaban de la manera que les parecía más conveniente. Una secuencia realizada para un instrumento de determinada marca, al ser reproducida en otro instrumento diferente producía resultados inesperados, ya que las notas eran las que correspondían, pero interpretadas por otros timbres. Para solucionar este problema, se agregó a la norma una lista ordenada de timbres denominada General MIDI. Cuando
un instrumento electrónico admite la configuración General MIDI, garantiza la correcta ejecución de una secuencia creada con base en esa norma.

9.2.4. Algunos tipos de mensajes

Los tipos de mensajes más comunes del protocolo MIDI son los siguientes:

Note On
Enciende una nota en un instrumento.

Note Off
La apaga.

Program Change
Cambia de timbre en el instrumento MIDI.

Control Change
Envía mensajes a los controladores, que son las palancas o perillas del panel de control de un instrumento MIDI que alteran al sonido en alguna forma.

El mensaje Note On, por ejemplo, tiene una longitud de 3 bytes. Al primer byte se lo denomina Status Byte, porque especifica el tipo de mensaje, a los restantes se los denomina Data Bytes.

El primer byte indica, entonces, el tipo de mensaje (en este caso Note On) y además el canal MIDI por el cual se envía. Vemos que hay dos informaciones distintas codificadas en un mismo byte: los 4 bits menos significativos indican canal MIDI (4 bits = 16 posibilidades), y los otros 4 bits indican el tipo de mensaje.
El segundo byte indica qué número de nota hay que tocar (0 a 127).
El tercer byte indica a qué intensidad debe ejecutarse esa nota (Key Velocity, de 1 a 127).

Los bytes de datos siempre tienen un 0 en el bit más significativo, por lo tanto, la información que pueden llevar es solamente de 7 bits (números decimales comprendidos entre 0 y 127).

Veamos un mensaje Note On en sistema de numeración binario:

byte 1 : 1 0 0 0 x x x x

El “1” del bit más significativo señala que se trata de un byte de Status. “000” significa Note On. Las x, si se reemplazan con unos o ceros, dan 16 posibilidades y especifican el canal MIDI.

byte 2 : 0 x x x x x x x

El primer “0” indica que se trata de un byte de datos. Las x, siete en total, permiten enviar un número entre 0 y 127 que es la nota MIDI a tocar.

byte 3 : 0 x x x x x x x

Otra vez se trata de un byte de datos, pero ahora las x representan la intensidad de la nota a ejecutar. Las intensidades varían de 1 a 127, debido a que una intensidad cero equivale a apagar la nota, lo cual se denomina mensaje alternativo de Note Off.

9.2.5. MIDI y Pure Data

Los objetos MIDI de PD pueden dividirse en dos grupos. El primer grupo está formado por objetos que reciben mensajes MIDI, mientras que el segundo está integrado por objetos que los envían. Para recibir o enviar mensajes debemos contar con un instrumento MIDI (un teclado, por ejemplo) que los genere o los interprete, según sea el caso, conectado a la computadora a través de una interfaz.

Entre los objetos más usados que reciben información MIDI encontramos los siguientes:

Los objetos más comunes que envían información son:

Si dispone de un teclado MIDI y una interfaz para conectarlo a la computadora, podrá comprobar la transmisión y recepción de datos, y el efecto que cada mensaje produce. De no poseer estos dispositivos, puede probar en una computadora que disponga de un sintetizador de sonido interno (varias de las computadoras que emplean una placa de sonido on-board poseen uno). Otro recurso posible es instalar un sampler o un sintetizador virtual, y comunicarlo con PD a través de puertos MIDI virtuales.

G.9.4. muestra un patch que envía mensajes Note in y mensajes de cambio de instrumento a un dispositivo MIDI externo, a un sintetizador interno, o bien a un dispositivo MIDI virtual (sampler o sintetizador) conectado a través de un puerto MIDI virtual. Para configurar alguna de estas opciones puede ir al menú Media-Preferencias MIDI.

El patch genera sucesiones de notas de una escala pentatónica (escala de 5 sonidos, sin semitonos), ascendentes o descendentes, cambiando la direccionalidad de forma aleatoria. En la ejecución de los giros escalares, que abarcan 3 octavas, la velocidad aumenta o disminuye, simulando una interpretación expresiva. Para dar un grado mayor de interés al resultado, se agrega una segunda voz, más grave, cuyas notas atacan al doble de tiempo que las de la voz superior. Desde el panel, es posible modificar la duración de las notas (cada nota más corta o más larga), el instrumento (números que corresponden al catálogo General MIDI) y la velocidad promedio de la ejecución.

G.9.4. Patch de ejecución MIDI

 

El gráfico G.9.5. pertenece al subpatch PD instrumento1, que es el que interpreta la voz aguda. Observamos allí un nuevo objeto, denominado makenote, que recibe por sus inlets, de izquierda a derecha, un número de nota MIDI a ejecutar, su key velocity (intensidad) y la duración en milisegundos que deseamos darle al sonido. El objeto deja pasar el número de nota y el key velocity al objeto noteout, y transcurrido el tiempo de duración, envía nuevamente el número de nota y un valor de key velocity igual a cero, para apagar la nota encendida.

G.9.5. Subpatch instrumento1

 

El objeto zl, de la librería Cyclone, lleva inscripto el argumento nth. Así configurado, el objeto devuelve el enésimo elemento de la lista que ingresa por su inlet izquierdo. El número de elemento a obtener será calculado en otro subpatch, y enviado a este remotamente mediante la variable n1.

El objeto makenote recibe por la izquierda la nota y por la derecha la duración, mientras que el valor de key velocity está especificado como argumento (64 equivale a mezzo forte).

La figura siguiente (G.9.6.) muestra el subpatch donde se genera el número de elemento a interpretar de la escala.

G.9.6. Subpatch escalas1

 

El objeto counter (librería Cyclone) cuenta entre 0 y 14, pero aleatoriamente recibe un bang por el segundo inlet, que lo obliga a cambiar de dirección en la cuenta (si cuenta de forma ascendente pasa a descendente y viceversa).

Por último, el subpatch velocidad (G.9.7.) produce una desviación en la velocidad establecida para generar las notas, sumando un valor de desvío que varía sinusoidalmente, a muy baja frecuencia
.
De la salida de audio del oscilador sinusoidal se extrae una muestra cada 20 milisegundos, con el objeto snapshot~. Cada vez que este objeto recibe un bang desde metro, devuelve el valor de amplitud de la señal de audio. Este método se emplea para convertir señales de audio, a frecuencia de muestreo, a señales de control de pocas muestras por segundo.

Los valores de amplitud, convenientemente escalados, se suman a la velocidad establecida por el usuario del programa.

G.9.7. Subpatch velocidad

 

La programación del patch de G.9.4. se encuentra en el archivo “70-protocolo MIDI.pd”. Para ejecutarlo debe disponer de una placa de sonido con sintetizador incorporado, un dispositivo físico MIDI de generación de sonidos, o bien un instrumento MIDI virtual (sampler o sintetizador).