Implementación MIDI 1.0

referencia comentada

Luis Jure
eMe
estudio de Música electroacústica
Escuela Universitaria de Música


0. introducción
1 channel messages
2 system messages 3 apéndice


0. introducción

0.1 conceptos generales

MIDI significa Musical Instrument Digital Interface, es decir interfaz digital de instrumentos musicales, y es un código de comunicación entre diferentes aparatos digitales de aplicación musical, no sólo instrumentos productores de sonido (sintetizadores y samplers), sino también procesadores de efectos, secuenciadores, computadoras, mezcladoras, etcétera.

0.1.1 generadores y controladores

Debemos tener presente que los instrumentos musicales que nos ocupan constan de dos grandes partes: generador y controlador. El generador es la sección que produce el sonido propiamente, y que puede ser programada, asignándole valores determinados a sus diferentes parámetros, para variar sus características tímbricas. El conjunto de todos esos valores se denomina habitualmente patch, y es el que determina el tipo de sonido resultante. Un patch puede estar programado de manera de buscar reproducir o imitar el timbre de un instrumento acústico, o por el contrario producir un timbre totalmente sintético. El controlador por su parte es la sección sobre la que actúa el ejecutante en el momento de tocar, y que envía la información al generador, diciéndole por ejemplo que debe prender o apagar una determinada nota, aplicar cierta modulación, etcétera. Los más comunes son los controladores en forma de teclado del tipo piano u órgano, pero puede haber de otras clases, tanto con analogías a instrumentos tradicionales (guitarra, saxo, instrumentos de percusión) como de nuevos diseños. No hay que olvidar esto, aunque muchas veces al hablar de un controlador daremos por sobrentendido que se trata de un teclado. También integran el controlador otros dispositivos (como ser ruedas, pedales, etc.) que agregan expresión adicional en el momento de tocar, ya que, según cómo haya sido programado el generador, accionarlos producirá diferentes variaciones en el resultado sonoro.

Los controladores adicionales más estandarizados, especialmente en los teclados, son los siguientes:

rueda de modulación (modulation wheel) - se posiciona libremente entre mínimo y máximo, y se usa típicamente para abrir o cerrar filtros, o controlar la amplitud y/o frecuencia de filtros de modulación (LFO) para lograr efectos de vibrato.

pitch-bender (rueda de inflexión de altura) - a diferencia de la anterior no va de mínimo a máximo sino que tiene el 0 en la posición central, y adquiere valores positivos o negativos al desplazarla arriba o abajo. Tampoco se posiciona libremente, ya que un resorte la mantiene en la posición central mientras no está siendo accionada. Su función básica es efectuar glissandos o inflexiones de altura (pitch-bending) ascendentes o descendentes, aunque algunos instrumentos permiten asignarles otras funciones.

pedal de sostenimiento (sustain pedal) - su efecto es similar al del pedal derecho del piano: mientras está oprimido no envía mensajes de apagado de las notas. Si bien es de movimiento continuo, sólo adquiere dos valores.

pedal de volumen - es de movimiento continuo y duplica el potenciómetro de volumen del instrumento. Es útil para controlar el volumen mientras se usan ambas manos para tocar.

Otros dispositivos no tan comunes incluyen el joystick, el controlador de soplo (breath controller), etcétera.

En los primeros modelos de sintetizador de producción masiva lanzados al mercado a fines de la década del 60, los distintos componentes del generador (básicamente osciladores, filtros, amplificadores, y generadores de envolvente) eran controlados por voltaje. Así, al accionar una tecla, ésta enviaba una corriente cuyo voltaje determinaba qué nota produciría el oscilador. Estos controladores eran extremadamente sencillos, sólo podían tocar una nota por vez y no enviaban ningún tipo de información adicional, como ser velocidad con que era oprimida la tecla, o la presión que se ejercía sobre la misma. Durante los años 70 se fueron ampliando poco a poco las posibilidades de los sintetizadores, tanto en lo referente al generador como al controlador.

El gran cambio ocurrió sin embargo recién a inicios de la década del 80, con la incorporación de la tecnología digital a los instrumentos musicales electrónicos, la que demoró muy poco tiempo en afirmarse y extenderse completamente. Hoy en día virtualmente todos los instrumentos electrónicos de aplicación musical son íntegramente digitales. Vale decir que todas sus funciones se llevan a cabo bajo forma de operaciones matemáticas realizadas por microprocesadores especialmente diseñados y programados a ese fin. Al accionar entonces sobre cualquier parte del controlador, éste envía al generador la correspondiente información en forma de un número, el que será interpretado según se haya realizado la programación.

Con el vertiginoso desarrollo de la tecnología informática -aumento de la velocidad de los microprocesadores y de la disponibilidad de memoria- las posibilidades de los instrumentos digitales se han ido ampliando sin cesar. Ha aumentado enormemente la capacidad polifónica (la de generar varias notas simultáneamente) y multitímbrica (capacidad de producir varios timbres diferentes simultáneamente); los algoritmos de síntesis son cada vez más complejos, llegando a incluir diversos procesamientos de la señal, como ser reverberación y otros efectos; se puede trabajar no sólo con ondas simples sintéticas, sino también con ondas complejas grabadas de instrumentos acústicos y almacenadas en forma digital, lo que permite mayor realismo en las síntesis de tipo imitativo. Por otra parte, el que los valores de los parámetros estén representados por números, permite una mayor precisión en la programación, exacta reproducibilidad, y la capacidad de almacenamiento de bancos enteros de programas o patches, los que quedan disponibles en forma inmediata. A su vez, los controladores también se han ido haciendo cada vez más sensibles, y al accionar una tecla por ejemplo, se envía información no sólo de qué nota se trata, sino también la velocidad con que fue oprimida y levantada (velocity), y las variaciones de presión que se ejercieron sobre ella (aftertouch). Según cómo esté programado el patch correspondiente (y las posibilidades que ofrezca el instrumento), el generador puede responder a estos matices de ejecución realizando desde pequeñas variaciones de articulación hasta drásticos cambios tímbricos.

0.1.2 orígenes

La inquietud de comunicar varios sintetizadores entre sí, es decir, que al accionar el controlador de uno de ellos pudieran hacerse sonar los generadores de dos o más, existió desde la época de los sintetizadores controlados por voltaje, y si bien aparecieron algunas interfaces, ninguna llegó a ser realmente universal y extendida, debido en parte a que no todos los fabricantes utilizaban la escala de controlar los generadores a razón de 1 volt por octava. Al introducirse componentes digitales en los sintetizadores aparecieron nuevos problemas y posibilidades, surgiendo en 1981 una propuesta de crear finalmente un protocolo de comunicación universal. La propuesta fue presentada a la Audio Engineering Society (AES) de Estados Unidos, y durante dos años un panel que incluía representantes de los mayores fabricantes de sintetizadores del mercado trabajó sobre la misma, dando a conocer en 1983 el estándar finalmente diseñado, que fue denominado MIDI. El mismo fue rápidamente adoptado por todos los fabricantes, quienes deben respetar estrictamente todas las especificaciones, de modo de que está garantizada una total compatibilidad. Actualmente esto es controlado por asociaciones como la MMA (MIDI Manufacturers Asociation), que nuclea los fabricantes de instrumentos MIDI en Estados Unidos, y la IMA (International MIDI Asociation), las que además coordinan y regulan el desarrollo y ampliación de la norma. Se puede decir que desde ese entonces todos los instrumentos electrónicos de aplicación musical virtualmente sin excepción incluyen una completa implementación MIDI.

En primera instancia entonces, el MIDI permitió tocar varios generadores a través de un solo controlador, obteniendo así sonidos con más cuerpo y timbres más complejos. Aparecieron también los módulos solamente generadores de sonido sin controlador propio, de precio más reducido y que podían ser tocados desde otro sintetizador. A su vez comenzaron a fabricarse controladores especializados que funcionaban solamente como tales, sin generador, y que ofrecían más posibilidades que los incluidos en los sintetizadores comunes. Pero éstas fueron tan sólo las aplicaciones más inmediatas. Pronto comenzaron a desarrollarse los secuenciadores, dispositivos que graban la información MIDI y que permiten además distintos tipos de edición, de modo tal que una "ejecución" sobre un controlador MIDI puede ser luego reproducida todas las veces que se desee, con las eventuales correcciones que fueran necesarias. Por medio de mensajes MIDI pueden alterarse también los parámetros de programación de un sintetizador o procesador. Con el agregado de la interfaz correspondiente, una computadora puede comunicarse con cualquier instrumento MIDI, y surgieron así sofisticados programas de distintas aplicaciones, como ser secuenciadores, editores y/o almacenadores de patches para sintetizadores, generadores automáticos de acompañamientos, compositores algorítmicos, etcétera. También por medio del MIDI pueden sincronizarse secuenciadores entre sí, con grabadores de audio y con video, pueden controlarse mezcladoras, mesas de luces, etcétera.

El MIDI es muy limitado en varios aspectos, como por ejemplo su relativamente baja velocidad de transmisión, y que sólo puede transmitir en 16 canales diferentes, los cuales pueden llegar a ser escasos si el sistema tiene interconectados muchos aparatos. Sin embargo el MIDI ha demostrado ser flexible y abierto, pudiendo adaptarse a las nuevas necesidades que han surgido en este tiempo. Es además de fácil implementación, está totalmente universalizado, y no presenta ningún tipo de problemas de comunicación entre los más diversos aparatos de diferentes marcas y modelos. Hace años que es prácticamente impensable prescindir del MIDI en ninguna aplicación musical que involucre instrumentos electrónicos.

0.2 implementación

0.2.1 especificaciones

Los datos MIDI se transmiten por medio de impulsos eléctricos a través de un cable. La transmisión se hace en un sólo sentido, de manera que una comunicación de ida y vuelta necesita dos cables. Los aparatos con interfaz MIDI tienen entonces una puerta de entrada y otra de salida, señaladas como MIDI IN y MIDI OUT respectivamente. En casi todos los casos se puede encontrar una tercera puerta, llamada MIDI THRU, que no sirve como puerta de envío sino solamente como paso, y por la que sale una copia exacta de lo que entra por la puerta IN.

La interfaz opera a 31.25 (±1%) Kbaud, con un bit de inicio, 8 bits de datos, y un bit de cierre, conformando así bytes de 10 bits con período de 320 microsegundos.

La corriente es de 5 mA, correspondiendo la presencia de corriente al bit lógico 0. Las puertas de entrada deben tener optoisoladores que necesiten menos de 5 mA para dispararse, y cuyo tiempo de subida y caída sea inferior a los 2 microsegundos.

Los conectores son de tipo DIN de 5 patas 180 grados, los conectores hembra montadas en el panel, y los machos en el cable. Las dos patas laterales (1 y 3) deben estar desconectadas para que el cable pueda transmitir. La pata del medio (2) está conectada a tierra, y la transmisión se realiza por las otras dos patas (4 y 5).

La longitud de un cable MIDI no debe superar en ningún caso los 15 metros, de modo de no generar demoras en la transmisión, y cada OUT debe conectarse a un solo IN. Si se quieren controlar varios dispositivos por una sola salida, puede hacerse una cadena usando los respectivos THRU, aunque en ese caso son necesarios optoisoladores muy veloces, ya que los errores de subida y caída de cada uno se adicionan. También hay que cuidar que la suma del largo de los cables no supere el máximo de 15 metros. En general, conviene no disponer más de tres unidades en serie, y utilizar siempre cables cortos.

Otra forma de conformar un sistema integrado por varios dispositivos es mediante una disposición en estrella. Para ello es necesario un MIDI thru box, una pieza de hardware que presenta una entrada y varias salidas. De esa forma se evita la suma de las demoras que se dan en la transmisión en serie.

La pieza de hardware que cumple la función contraria es el MIDI merger, o mezclador MIDI, que suma la entrada de dos o más puertas IN y la envía por la salida. Una utilización típica es cuando se quiere tocar mediante un controlador externo un instrumento que a la vez está siendo tocado por un secuenciador. Algunos instrumentos, especialmente los módulos generadores que no tienen controlador propio, están provistos de dos puertas IN, previendo esa situación. De la misma manera hay controladores especializados e interfaces MIDI para computadoras que disponen de dos puertas OUT. En algunos casos ambas puertas envían una copia de la misma salida, en otros casos se trata efectivamente de dos salidas diferentes, lo que duplica la cantidad de canales de transmisión.

0.2.2 procesadores MIDI

Aparte de los MIDI merger y los MIDI thru boxes, hay otros dispositivos que cumplen funciones inteligentes sobre los datos recibidos. Algunos de estos procesadores MIDI cumplen funciones específicas, otros pueden ser programados para realizar varias diferentes. Las operaciones más usuales son:

Estas operaciones pueden servir entre otras cosas para superar limitaciones en la implementación MIDI de algunos instrumentos, como ser que no transmitan en los 16 canales, que tengan pocos números de controladores, etcétera.

0.3 sistemas de numeración

Cada uno de los impulsos eléctricos por medio de los cuales se transmiten los datos MIDI conforma un bit de información, y puede tomar el valor 1 ó 0. El MIDI utiliza "palabras" o bytes de 8 bits, con las que se pueden representar valores entre 0 y 255. Puede convenir escribir los bytes en sistema de numeración binario (base 2), en el cual el bit menos significativo -el de la derecha, llamado least significant bit o LSB - toma el valor 0 ó 1 (es decir 20) según esté desactivado o activado, el siguiente los valores 0 ó 2 (21), el que sigue los valores 0 ó 4 (22), y así sucesivamente hasta el bit más significativo (el último de la izquierda, most significant bit o MSB), que toma los valores 0 ó 128 (27). Para saber el equivalente decimal (base 10) de un byte, se suman los valores de todos los bits que tengan valor 1:

0000 0000 = 0

:

:

0010 1100 = 25 + 23 + 22 = 32 + 8 + 4 = 44

:

:

1111 1111 = 27 + 26 + 25 + 24 + 23 + 22 + 21 = 128 + 64 + 32 + 16 + 8 + 4 + 2 + 1 = 255

La cantidad de valores que se pueden representar con n bits es 2n. Por tanto, si se mantiene por ejemplo el bit más significativo fijo, quedan sólo 7 bits libres, y se podrán representar 27 = 128 valores. Por otra parte, se puede dividir el byte en dos grupos de 4 bits, llamados nibbles. Con un nibble es posible representar 16 valores, los que en algunos casos puede convenir escribir en sistema hexadecimal (base 16), de acuerdo a la siguiente tabla de conversión:

binario decimal hexadecimal
0000 0 0
0001 1 1
0010 2 2
0011 3 3
0100 4 4
0101 5 5
0110 6 6
0111 7 7
1000 8 8
1001 9 9
1010 10 A
1011 11 B
1100 12 C
1101 13 D
1110 14 E
1111 15 F

(Queda claro entonces que la base de un sistema de numeración es la cantidad de símbolos diferentes que hay a disposición para representar los valores, y por tanto la cantidad de valores que puedo representar con un sólo símbolo. Como en MIDI se transmiten los valores en forma de voltajes, conviene usar la base más baja, porque se puede transmitir a gran velocidad pero sin mucha precisión.)

Los bytes de 8 bits pueden ser representados en hexadecimal con dos símbolos, siendo cada uno de ellos la traducción del respectivo nibble:

binario hex decimal
0000 0000 00 0
: : :
0010 1100 2C 44
: : :
0111 1001 79 121
: : :
1111 1111 FF 255

Referirse también a la tabla completa de conversión entre estos tres sistemas de numeración en el apéndice. Como se ve, algunas expresiones coinciden en diferentes sistemas, por lo que es necesario aclarar cuál se está usando.

0.4 la transmisión MIDI

0.4.1 tipos de byte

En la especificación MIDI están definidos dos tipos de byte, de estatus y de datos, que están identificados por su primer bit o MSB, según sea 1 ó 0 respectivamente.

Status byte (byte de estatus): es el que determina de qué tipo de mensaje se trata, por ejemplo prender o apagar una nota en un determinado canal, iniciar o detener el secuenciador, seleccionar un patch, o enviar un pulso de reloj o clock para sincronización, etcétera. Todos los bytes de estatus comienzan con bit 1 (de 1000 0000 a 1111 1111): son los valores 128 a 255 (de 80 a FF en hexadecimal).

Data byte (byte de datos): según cuál sea el byte de estatus, puede ser seguido de uno o más bytes de datos, con los valores correspondientes al tipo de mensaje. Por ejemplo si el byte de estatus es de prender una nota en cierto canal, deben seguir dos bytes de datos indicando respectivamente qué nota hay que prender y con qué velocidad. Si el byte de estatus es seleccionar un patch en cierto canal, le sigue un byte de datos con el número de patch. Los data bytes son los que comienzan con bit 0 (de 0000 0000 a 0111 1111), de 0 a 127 en decimal, de 00 a 7F en hexadecimal. Es por esto que varios parámetros (como las velocities, las modulaciones, volumen, etcétera) tienen 128 valores posibles. También es la cantidad total de notas que hay en MIDI, diez octavas y 8 semitonos, de C-1 a G9, siendo A4 el la central de 440 Hz. Otros parámetros, como el pitch bending y el posicionador dentro de una canción, precisan mayor definición; en ese caso son necesarios dos bytes consecutivos de datos, lo que da una definición de 14 bits (16.384 valores).

Running status: cuando hay una sucesión de mensajes del mismo tipo, no es necesario repetir todas las veces el status byte; solamente se envía el primero de ellos, y luego los bytes de datos respectivos. Por ejemplo si se trata de prender una serie de notas en un canal, se envía el status byte correspondiente, y luego los dos bytes de datos para cada una de las notas.

0.4.2 canales MIDI

La línea MIDI transmite información simultáneamente en 16 canales. Si se están controlando varios instrumentos a la vez, cada uno de ellos puede ser programado para responder a un canal específico, de modo de que queda conformada una "orquesta" en la que se pueden tocar notas independientemente en cada instrumento. La mayoría de los instrumentos musicales digitales actualmente tienen capacidad multitímbrica, es decir que funcionan como varios instrumentos virtuales en uno: reciben en más de un canal simultáneamente (usualmente 8 o los 16), pudiendo asignar un patch o timbre diferente a cada canal. Algunos mensajes se dirigen a un canal específico; en ellos el primer nibble del status byte indica de qué comando se trata, y el segundo nibble a qué canal se aplica (recordar que un nibble puede representar precisamente hasta 16 valores), según la siguiente tabla:

binario decimal hexa número de canal
0000 0 0 1
0001 1 1 2
0010 2 2 3
0011 3 3 4
0100 4 4 5
0101 5 5 6
0110 6 6 7
0111 7 7 8
1000 8 8 9
1001 9 9 10
1010 10 A 11
1011 11 B 12
1100 12 C 13
1101 13 D 14
1110 14 E 15
1111 15 F 16

0.4.3 tipos de mensaje

Hay dos tipos de mensaje: de canal (channel message) y de sistema (system message).

channel messages: afectan solamente a uno de los 16 canales MIDI, y sólo responden a este tipo de mensajes los instrumentos sintonizados para recibir en ese canal. Los mensajes de canal se subdividen a su vez en:

system messages: éstos son recepcionados por todos instrumentos conectados a la red. Hay tres tipos de mensajes de sistema:

En los siguientes capítulos se dará el formato completo de transmisión de cada uno de estos mensajes.


1 channel messages

Como indica su nombre, los mensajes de canal sólo actúan sobre los instrumentos asignados a ese canal. Estos mensajes constan de un byte de estatus, seguido de uno o dos bytes de datos. En todos los channel messages el nibble más significativo del byte de estatus corresponde al comando en cuestión, mientras que el segundo nibble indica a cuál de los 16 canales MIDI afecta dicho comando.

1.1 channel voice

Estos mensajes están relacionados directamente con la producción de sonido, e incluyen comandos como prender o apagar nota, aplicar controladores, pitch bending, cambios de patch, etcétera.

1.1.1 note off (apagar nota)

nibble de comando: bin 1000; hex 8 - el segundo nibble indica el canal

formato: byte de estatus más dos bytes de datos, uno para la nota y otro para la velocidad

el paquete completo queda conformado entonces por tres bytes, que pueden oscilar entre los siguientes valores, expresados en los tres sistemas de numeración:


tipo

binario

hexa

decimal


1

estatus

1000 0000

a

1000 1111

80

a

8F

128

a

143

apagar nota en canal 1

a

apagar nota en canal 16

2

data

0000 0000

a

0111 1111

00

a

7F

0

a

127

nº de nota

(por las equivalencias ver tabla en el apéndice)

3

data

0000 0000

a

0111 1111

00

a

7F

0

a

127

velocidad (con que se levanta la tecla, por ejemplo)

Nota: muy pocos instrumentos responden o transmiten velocidad de apagado de la nota. En ese caso se envía siempre un valor fijo, usualmente 0 ó 64, según el modelo de sintetizador.

1.1.2 note on (prender nota)

comando: bin 1001; hex 9 - el segundo nibble indica el canal

formato: byte de estatus más dos bytes de datos, uno para la nota y otro para la velocidad

tipo

binario

hexa

decimal


1

estatus

1001 0000

a

1001 1111

90

a

9F

144

a

159

prender nota en canal 1

a

prender nota en canal 16

2

data

0000 0000

a

0111 1111

00

a

7F

0

a

127

nº de nota

(por las equivalencias ver tabla en el apéndice)

3

data

0000 0000

a

0111 1111

00

a

7F

0

a

127

velocidad de ataque

Nota: cuando el segundo byte de datos es 0000 0000 (vel = 0), el comando equivale a apagar nota. Esto es conveniente en running status, ya que se puede tanto prender como apagar notas sin necesidad de cambiar de status byte.

1.1.3 polyphonic aftertouch (poly pressure) (presión polifónica)

Este mensaje envía la modulación solamente a la tecla que está siendo presionada.

nibble de comando: bin 1010; hex A - el segundo nibble indica el canal

formato: byte de estatus más dos bytes de datos, uno para la nota y otro para la presión

tipo

binario

hexa

decimal


1

estatus

1010 0000

a

1010 1111

A0

a

AF

160

a

175

presionar nota en canal 1

a

presionar nota en canal 16

2

data

0000 0000

a

0111 1111

00

a

7F

0

a

127

nº de nota


3

data

0000 0000

a

0111 1111

00

a

7F

0

a

127

presión

Nota: no todos los instrumentos responden y/o transmiten este comando.

1.1.4 control change

nibble de comando: bin 1011; hex B - el segundo nibble indica el canal

formato: comando más dos bytes de datos, uno para el nº de controlador y otro para su valor

tipo

binario

hexa

decimal


1

estatus

1011 0000

a

1011 1111

B0

a

BF

176

a

191

accionar controlador en canal 1

a

accionar controlador en canal 16

2

data

0000 0000

a

0111 1111

00

a

7F

0

a

127

nº de controlador


3

data

0000 0000

a

0111 1111

00

a

7F

0

a

127

valor del controlador

Notas:

Hay diversos tipos de controladores: los llamados continuos (rueda de modulación, volumen, etcétera) ofrecen todos los valores posibles dentro del rango disponible, mientras que los del tipo interruptor o switch (como el pedal de sostenimiento, etcétera) sólo tienen dos posiciones, off y on.

Los números de controlador 0 a 31 (hex 00 a 1F) están reservados para controladores continuos. Enviando un byte de datos se logra una definición de 7 bits (128 valores). Estos controladores pueden sin embargo admitir una resolución de 14 bits (16.384 valores), en cuyo caso es necesario enviar un segundo mensaje portando otro byte de datos.

Los controladores 32 a 63 (20 a 3F) transmiten el segundo byte de datos de los controladores 0 a 31 respectivamente.

Los controladores 64 a 95 (40 a 5F) se asignan a parámetros de baja resolución o a switches, y sólo admiten un byte de datos, o sea una resolución de 0 a 127. En el caso de los switches, los valores 0 a 63 se reconocen como igual a 0 (off), y los valores 64 a 127 como igual a 127 (on).

El controlador nº 1 está asignado a la rueda de modulación; los demás números de controlador quedan libres para ser determinados por cada fabricante, aunque hay varios tipos de controlador, como ser volumen general, pedal de sostenimiento, etcétera, que están asignados en forma prácticamente universal a un número determinado (ver la tabla en el apéndice). El pitch bend no se transmite como controlador, sino que tiene su propio tipo de mensaje.

Los últimos siete números, de 121 a 127 (hex 79 a 7F), no están asignados a controladores, sino que quedan reservados para mensajes de channel mode (ver 1.2).

1.1.5 program change

Este comando se utiliza para seleccionar un "patch" o timbre determinado de los guardados en la memoria del instrumento, y asignarlo a un canal.

nibble de comando: bin 1100; hex C - el segundo nibble indica el canal

formato: comando más un byte de datos para el número de programa

tipo

binario

hexa

decimal


1

estatus

1100 0000

a

1100 1111

C0

a

CF

192

a

207

cambio de programa en canal 1

a

cambio de programa en canal 16

2

data

0000 0000

a

0111 1111

00

a

7F

0

a

127

nº de programa


1.1.6 aftertouch (channel pressure) (presión)

A diferencia del polyphonic aftertouch, este mensaje modula a todas las notas que están sonando en ese canal, como la rueda de modulación (1.1.4) y el pitch bend (1.1.7).

nibble de comando: bin 1101; hex D - el segundo nibble indica el canal

formato: byte de estatus más un byte de datos para la presión

tipo

binario

hexa

decimal


1

estatus

1101 0000

a

1101 1111

D0

a

DF

208

a

223

presión en canal 1

a

presión en canal 16

2

data

0000 0000

a

0111 1111

00

a

7F

0

a

127

valor de la presión

1.1.7 pitch bend

nibble de comando: bin 1110; hex E - el segundo nibble indica el canal

formato: byte de estatus más dos bytes de datos, para la posición de la rueda (actúa sobre todas las notas del canal)

tipo

binario

hexa

decimal


1

estatus

1110 0000

a

1110 1111

E0

a

EF

224

a

239

pitch bend en canal 1

a

pitch bend en canal 16

2

data

0000 0000

a

0111 1111

00

a

7F

0

a

127

byte más significativo (MSB) de la posición de la rueda

3

data

0000 0000

a

0111 1111

00

a

7F

0

a

127

byte menos significativo (LSB)

Nota: el pitch bend requiere gran definición, de modo de poder hacer desplazamientos de altura bastante amplios (hasta una octava hacia arriba y hacia abajo) sin que se noten "escalones". Usar dos bytes de datos da una definición de 14 bits (recordar que en los bytes de datos el primer bit siempre es 0, lo que deja 7 bits significativos), permitiendo representar hasta 214 = 16384.

1.2 channel mode

Estos bytes determinan la manera en que se recibe y responde a los datos MIDI en los diferentes canales. Los comandos de channel mode no tienen un byte de estatus propio, sino que se trasmiten bajo el formato de control change, con número de controlador de 122 a 127 (ver 1.1.4).

1.2.1 reset all controllers

número de controlador: 121 (bin 0111 1001, hex 79). Reestablece todos los controladores a los valores que por defecto adquiere el instrumento al encenderse.

formato: tres bytes, el primero (byte de estatus) es el de control change, el segundo es dec 121, y el tercero es siempre 0.

tipo

binario

hexa

decimal


1

estatus

1011 0000

a

1011 1111

B0

a

BF

176

a

191

controlador en canal 1

a

controlador en canal 16

2

data

0111 1010

79

121

reset all controllers

3

data

0000 0000

-

0111 1111

00

-

7F

0

-

127

off

on

1.2.2 local control

Abre o cierra la ruta que conecta el controlador (teclado u otro tipo) del sintetizador con su generador. En local control off, accionar el teclado no producirá sonido en el sintetizador interno, aunque puede enviar datos vía MIDI a otro módulos. A su vez el generador puede responder a datos recibidos externamente.

número de controlador: 122 (bin 0111 1010, hex 7A)

formato: tres bytes, el primero (byte de estatus) es el de control change, el segundo es dec 122, y el tercero puede tomar el valor 0 (local control off) ó 127 (local control on).

tipo

binario

hexa

decimal


1

estatus

1011 0000

a

1011 1111

B0

a

BF

176

a

191

controlador en canal 1

a

controlador en canal 16

2

data

0111 1010

7A

122

local control

3

data

0000 0000

-

0111 1111

00

-

7F

0

-

127

off

on

1.2.3 all notes off

Manda apagar todas las notas en un canal determinado. Se utiliza en casos de emergencia, cuando una o más notas han quedado "colgadas", y no sustituye al comando note off.

número de controlador: 123 (bin 0111 1011, hex 7B).

formato:

tipo

binario

hexa

decimal


1

estatus

1011 0000

a

1011 1111

B0

a

BF

176

a

191

controlador en canal 1

a

controlador en canal 16

2

data

0111 1011

7B

123

all notes off

3

data

0000 0000

00

0

(3er byte siempre es 0)

1.2.4 omni mode offi

En el modo de recepción "omni", el generador responde a los mensajes MIDI transmitidos en cualquiera de los 16 canales. "Omni mode off" desactiva este modo de recepción, a la vez que envía un mensaje de "all notes off".

número de controlador: 124 (bin 0111 1100, hex 7C)

formato:

tipo

binario

hexa

decimal


1

estatus

1011 0000

a

1011 1111

B0

a

BF

176

a

191

controlador en canal 1

a

controlador en canal 16

2

data

0111 1100

7C

124

omni mode off (all notes off)

3

data

0000 0000

00

0

(3er byte siempre es 0)

1.2.5 omni mode on

Activa el modo omni, y envía un comando de "all notes off".

número de controlador: 125 (bin 0111 1101, hex 7D)

formato:

tipo

binario

hexa

decimal


1

estatus

1011 0000

a

1011 1111

B0

a

BF

176

a

191

controlador en canal 1

a

controlador en canal 16

2

data

0111 1101

7D

125

omni mode on (all notes off)

3

data

0000 0000

00

0

(3er byte siempre es 0)

1.2.6 mono mode on (poly mode off)

En modo mono, el generador responderá monofónicamente, es decir asignando una sola voz a cada uno de los canales que esté activado, a partir de un número de canal determinado que funciona como canal base (base channel). El número de canales activados está determinado por el tercer byte. En el caso especial de que éste tenga valor 0, se asignan tantos canales como voces tenga el receptor, siempre a partir del canal base. Envía simultáneamente un mensaje de "all notes off".

número de controlador: 126 (bin 0111 1110, hex 7E)

formato:

tipo

binario

hexa

decimal


1

estatus

1011 0000

a

1011 1111

B0

a

BF

176

a

191

controlador en canal 1

a

controlador en canal 16

2

data

0111 1011

7B

123

all notes off

3

data

0000 0000

00

0

(3er byte siempre es 0)

1.2.7 poly mode on (mono mode off)

Desactiva el modo mono, y el receptor responde polifónicamente. Envía simultáneamente un mensaje de "all notes off".

número de controlador: 127 (bin 0111 1111, hex 7F)

formato:

tipo

binario

hexa

decimal


1

estatus

1011 0000

a

1011 1111

B0

a

BF

176

a

191

controlador en canal 1

a

controlador en canal 16

2

data

0111 1111

7F

127

poly mode on / mono mode off (all notes off)

3

data

0000 0000

00

0

(3er byte siempre es 0)

Según la combinación entre omni mode on/off y los modos poly y mono, se formarían entonces cuatro modos de recepción:

modo

omni on/off

mono/poly


1

omni on

poly

se reciben mensajes en todos los canales y se responde polifónicamente en el base channel

2

" "

mono

se reciben mensajes en todos los canales y se responde monofónicamente en el base channel

3

omni off

poly

se reciben mensajes sólo en el base channel, y se responde polifónicamente

4

" "

mono

se reciben mensajes en un número de canales determinado por el tercer byte a partir del base channel, y se responde monofónicamente en cada uno de ellos

Hace tiempo que estos cuatro modos, definidos en una primera época de capacidades polifónicas y multitímbricas muy limitadas, están obsoletos. Actualmente los sintetizadores funcionan en modo multi como varios instrumentos virtuales, cada uno de ellos respondiendo a un canal MIDI diferente con su propio timbre. Usualmente se puede definir en forma independiente el canal de recepción de cada uno de esos "instrumentos", que pueden oscilar entre 8 y 16, así como asignar a cada uno de ellos un timbre o patch determinado. La distribución de voces entre los instrumentos se hace en forma dinámica a medida que cada uno va tocando nuevas notas (dynamic voice allocation), aunque a veces interesa determinar que un instrumento responda monofónicamente, cuando va a tocar solamente líneas melódicas, de manera de que no utilice innecesariamente voces adicionales.


2 system messages

Los mensajes de sistema no tienen especificación de canal, y son recibidos por todos los dispositivos interconectados dentro del sistema. Abarcan los bytes de 240 a 255 (bin 1111 0000 a 1111 1111, hex F0 a FF), y se dividen en sistema exclusivo (System Exclusive), sistema común sistema:sistema común (System Common), y sistema tiempo real (System Real Time).

2.1 system exclusive

Los mensajes de sistema exclusivo (SysEx) están dirigidos a instrumentos de una marca y modelo determinados, y son solamente aceptados por ellos. Cada fabricante tiene total libertad de determinar el formato y la longitud del mensaje, solamente debe respetar el formato del encabezamiento, que incluye precisamente un número identificatorio del fabricante. El sistema exclusivo fue pensado para poder enviar mensajes específicos de un aparato determinado, como ser el cambio de parámetros en la programación de los patches, el volcado de los programas de los bancos de memoria, etcétera. El SysEx no sólo permite este tipo de comunicación de un instrumento a otro del mismo modelo, sino también entre un instrumento y un secuenciador, ya sea con fines de almacenamiento de bancos de timbres, o para modificar parámetros tímbricos durante una secuencia. Es utilizado además por los programas de computadora que editan y almacenan patches.

El formato de transmisión consta de un ancabezamiento o header, cuyo primer byte es el de inicio de SysEx (dec 240, hex F0, bin 1111 0000), y cuyo segundo byte es el ID del fabricante. Lo que sigue es libremente determinado por el fabricante, pero generalmente el header tiene un tercer byte correspondiente al modelo. (Cuando una serie de modelos diferentes tienen arquitectura muy similar, el fabricante puede designar para todos ellos el mismo ID, como forma de reservar números para el futuro. Recordar que sólo hay 128 valores disponibles). Luego viene una serie de cualquier longitud posible de bytes de datos, con la única condición de que todos tengan 0 como bit más significativo. Iniciar con bit 1 significaría un byte de estatus, y eso interrumpiría el SysEx. Los únicos bytes de estatus que pueden intercalarse son los del tipo System Real Time (ver 2.3). El fin del sistema exclusivo está indicado por el byte dec 247 (hex F7, bin 1111 0111).

   

binario

hexa

decimal

 
header status byte

1111 0000

F0 240 SysEx - inicio de Sistema Exclusivo
ID 1

0iii iiii

    ID - número del fabricante, o tipo de comando universal
ID 2

0iii iiii

    modelo
data data bytes

0ddd dddd
:
:
:
0ddd dddd

    data

(cualquier cantidad de bytes puede ser enviado aquí, siempre que el byte más significativo sea 0; no se puede intercalar ningún otro tipo de byte de status, exceptuando Real Time)

tail status byte

1111 0111

F7 247 EOX (End of SysEx) - fin de Sistema Exclusivo

Los ID numbers son distribuidos por la MMA y por su contrapartida japonesa la JMSC (Japanese MIDI Standard Comitee). Algunos de esos números, sin embargo, han sido asignados a mensajes de tipo universal, como forma de ampliar la norma MIDI. Hay tres tipos de mensaje dentro de este formato: Sample Dump Standard (SDS), Standard MIDI File (o simplemente MIDI File), y el MIDI Time Code (MTC).

El Sample Dump Standard es una forma estandarizada de volcar samples, es decir muestras digitales de sonido. El formato admite gran variedad de frecuencias de sampleo y número de bits de cuantización, de forma de que puede ser implementado por cualquier sampler, aunque no todos los modelos se adaptan a este tipo de comunicación, aparte del suyo propio. El SDS puede transmitir también los puntos de inicio y final de gran cantidad de loops dentro del sample.

El Standard MIDI File es un formato también estandarizado de guardar secuencias, o sea series ordenadas de eventos MIDI determinados en su ubicación temporal en términos de compases y tiempos. Hay diversos tipos de secuenciadores, tanto de software (programas de computadora que cumplen esa función), como de hardware (aparatos dedicados a ese fin, sean independientes, o integrados a un sintetizador o sampler). Cada secuenciador tiene su propio formato de secuencias, y el MIDI File es una forma de guardar la información básica en un formato estandarizado, de manera de poder leer archivos de un secuenciador a otro. Prácticamente todos los secuenciadores, especialmente los de software, pueden tanto leer como guardar archivos en formato MIDI File.

El MIDI Time Code es un código de tiempo similar al de la SMPTE (Society of Motion Pictures and Television Engineers), utilizado en la sincronización de videos y películas. Arriba mencionábamos que en las secuencias MIDI la información de ubicación temporal de los eventos se hace en términos relativos de compases, tiempos dentro del compás, y sudivisiones de los tiempos. La ubicación real de los eventos varía con los cambios de tempo. El código SMPTE, por el contrario, utiliza una referencia temporal en términos absolutos de horas, minutos, segundos y cuadros de imagen (divisiones del segundo en 25, 29.97 ó 30, según la norma utilizada). El MTC es una manera de traducir el código SMPTE a un formato que puede transmitirse como mensajes MIDI.

2.2 system common

2.2.1 song position pointer (señalador de posición dentro de la canción)

El SPP es un registro, usualmente en términos de cuartos de tiempo, del tiempo que ha pasado desde el inicio de una secuencia. Se resetea a 0 cada vez que hay un comando de start, se detiene con el de stop, y reinicia la cuenta con el de continue (ver 2.3). Este mensaje ordena al secuenciador a ubicarse en determinado lugar de la canción.

byte de estatus: bin 1111 0010, dec 242, hex F2

formato: byte de estatus más dos bytes de datos, que indican la posición en cuartos de unidad de tiempo desde el inicio de la secuencia

el mensaje completo es:

tipo

binario

hexa

decimal


1

estatus

1111 0010

F2

242

song position pointer

2

data

0000 0000

a

0111 1111

00

a

7F

0

a

127

byte más significativo (MSB) de la posición en la canción

3

data

0000 0000

a

0111 1111

00

a

7F

0

a

127

byte menos significativo (LSB)

2.2.2 song select

Similar a program change, pero para secuencias en lugar de patches. Selecciona una canción de la memoria para ser tocada al recibir el comando start.

byte de estatus: bin 1111 0011, dec 243, hex F3

formato: byte de estatus más un byte de datos

el mensaje completo es:

tipo

binario

hexa

decimal


1

estatus

1111 0011

F3

243

song select

2

data

0000 0000

a

0111 1111

00

a

7F

0

a

127

nº de secuencia

2.2.3 tune request

Este comando hace que todos los instrumentos del sistema realicen su rutina de afinación de acuerdo a su referencia interna.

byte de status: bin 1111 0110, dec 246, hex F6

formato: byte de estatus

2.3 system real time

Los cuatro primeros de estos mensajes están relacionados con el funcionamiento de secuenciadores. Cuando se utilizan varios secuenciadores simultáneamente, es necesario sincronizarlos, de modo que el clock interno de uno de ellos, que funcionará como maestro, controle a todos los demás, que serán sus esclavos.

2.3.1 timing clock

Controla la velocidad de funcionamiento de los secuenciadores esclavos, quienes obedecen a estos mensajes en lugar de sus relojes internos. El pulso es enviado por el secuenciador maestro a intervalos iguales, a razón de 24 veces por la figura que represente la unidad de tiempo.

byte de estatus: bin 1111 1000, dec 248, hex F8

formato: byte de estatus

2.3.2 start

Manda empezar a tocar la secuencia actualmente en memoria desde el principio (song position pointer 0).

byte de estatus: bin 1111 1010, dec 250, hex FA

formato: byte de estatus

2.3.3 continue

Manda comenzar a tocar la secuencia desde el lugar de la última detención, o del señalado por el último song position pointer.

byte de estatus: bin 1111 1011, dec 251, hex FB

formato: byte de estatus

2.3.4 stop

Manda detener el secuenciador.

byte de estatus: bin 1111 1100, dec 252, hex FC

formato: byte de estatus

2.3.5 active sensing

Mensaje enviado cada tercio de segundo para verificar que el instrumento está conectado al sistema y respondiendo.

byte de estatus: bin 1111 1110, dec 254, hex FE

formato: byte de estatus

2.3.6 system reset

Ordena al aparato a resetearse, readoptando todas las variables los valores por defecto que tienen al encenderse.

bytes de status: bin 1111 1111, dec 255, hex FF

formato: byte de estatus


3 apéndice

3.1 tabla de conversión

data bytes

bin

hex

dec

nota

tipo de controlador

bin

hex

dec

nota

tipo de controlador

0000 0000

00

0

C 1


0010 0000

20

32

G#1

segundo byte (LSB)
de los controladores
de 14 bits

0000 0001

01

1

C# 1

modulation wheel

0010 0001

21

33

A1

0000 0010

02

2

D 1

breath controller

0010 0010

22

34

A#1

0000 0011

03

3

D# 1


0010 0011

23

35

B1

0000 0100

04

4

E 1

foot controller

0010 0100

24

36

C2

0000 0101

05

5

F 1

portamento

0010 0101

25

37

C#2

0000 0110

06

6

F# 1


0010 0110

26

38

D2

0000 0111

07

7

G 1

main volume

0010 0111

27

39

D#2

0000 1000

08

8

G# 1

balance

0010 1000

28

40

F2

0000 1001

09

9

A 1


0010 1001

29

41

F2

0000 1010

0A

10

A# 1

pan

0010 1010

2A

42

F#2

0000 1011

0B

11

B 1

control de expresión

0010 1011

2B

43

G2

0000 1100

0C

12

C0


0010 1100

2C

44

G#2

0000 1101

0D

13

C#0


0010 1101

2D

45

A2

0000 1110

0E

14

D0


0010 1110

2E

46

A#2

0000 1111

0F

15

D#0


0010 1111

2F

47

B2

0001 0000

10

16

E0


0011 0000

30

48

C3

0001 0001

11

17

F0


0011 0001

31

49

C#3

0001 0010

12

18

F#0


0011 0010

32

50

D3

0001 0011

13

19

G0


0011 0011

33

51

D#3

0001 0100

14

20

G#0


0011 0100

34

52

E3

0001 0101

15

21

A0


0011 0101

35

53

F3

0001 0110

16

22

A#0


0011 0110

36

54

F#3

0001 0111

17

23

B0


0011 0111

37

55

G3

0001 1000

18

24

C1


0011 1000

38

56

G#3

0001 1001

19

25

C#1


0011 1001

39

57

A3

0001 1010

26

D1


0011 1010

3A

58

A#3

0001 1011

1B

27

D#1


0011 1011

3B

59

B3

0001 1100

1C

28

E1


0011 1100

3C

60

C4

0001 1101

1D

29

F1


0011 1101

3D

61

C#4

0001 1110

1E

30

F#1


0011 1110

3E

62

D4

0001 1111

1F

31

G1


0011 1111

3F

63

D#4

0100 0000

40

64

E4

sustain

0110 0000

60

96

C7


0100 0001

41

65

F4

portamento

0110 0001

61

97

C#7


0100 0010

42

66

F#4

sostenuto pedal

0110 0010

62

98

D7


0100 0011

43

67

G4

soft pedal

0110 0011

63

99

D#7


0100 0100

44

68

G#4


0110 0100

64

100

E7


0100 0101

45

69

A4


0110 0101

65

101

F7


0100 0110

46

70

A#4


0110 0110

66

102

F#7


0100 0111

47

71

B4


0110 0111

67

103

G7


0100 1000

48

72

C5


0110 1000

68

104

G#7


0100 1001

49

73

C#5


0110 1001

69

105

A7


0100 1010

4A

74

D5


0110 1010

6A

106

A#7


0100 1011

4B

75

D#5


0110 1011

6B

107

B7


0100 1100

4C

76

E5


0110 1100

6C

108

C8


0100 1101

4D

77

F5


0110 1101

6D

109

C#8


0100 1110

4E

78

F#5


0110 1110

6E

110

D8


0100 1111

4F

79

G5


0110 1111

6F

111

D#8


0101 0000

50

80

G#5


0111 0000

70

112

E8


0101 0001

51

81

A5


0111 0001

71

113

F8


0101 0010

52

82

A#5


0111 0010

72

114

F#8


0101 0011

53

83

B5


0111 0011

73

115

G8


0101 0100

54

84

C6


0111 0100

74

116

G#8


0101 0101

55

85

C#6


0111 0101

75

117

A8


0101 0110

56

86

D6


0111 0110

76

118

A#8


0101 0111

57

87

D#6


0111 0111

77

119

B8


0101 1000

58

88

E6


0111 1000

78

120

C9


0101 1001

59

89

F6


0111 1001

79

121

C#9

reset all controllers

0101 1010

5A

90

F#6


0111 1010

7A

122

D9

local control

0101 1011

5B

91

G6

efectos

0111 1011

7B

123

D#9

all notes off

0101 1100

5C

92

G#6

trémolo

0111 1100

7C

124

E9

omni off

0101 1101

5D

93

A6

chorus

0111 1101

7D

125

F9

omni on

0101 1110

5E

94

A#6

detune

0111 1110

7E

126

F#9

mono on

0101 1111

5F

95

B6

phaser

0111 1111

7F

127

G9

poly on

status bytes

bin

hex

dec

tipo de mensaje

canal

bin

hex

dec

tipo de mensaje

canal

1000 0000

80

128

Note off

 ch 1

1010 0000

A0

160

Poly press

 ch 1

1000 0001

81

129

 ch 2

1010 0001

Al

161

 ch 2

1000 0010

82

130

 ch 3

1010 0010

A2

162

 ch 3

1000 0011

83

131

 ch 4

1010 0011

A3

163

 ch 4

1000 0100

84

132

 ch 5

1010 0100

A4

164

 ch 5

1000 0101

85

133

 ch 6

1010 0101

A5

165

 ch 6

1000 0110

86

134

 ch 7

1010 0110

A6

166

 ch 7

1000 0111

87

135

 ch 8

1010 0111

A7

167

 ch 8

1000 1000

88

136

 ch 9

1010 1000

A8

168

 ch 9

1000 1001

89

137

 ch 10

1010 1001

A9

169

 ch 10

1000 1010

8A

138

 ch 11

1010 1010

AA

170

 ch 11

1000 1011

8B

139

 ch 12

1010 1011

AB

171

 ch 12

1000 1100

8C

140

 ch 13

1010 1100

AC

172

 ch 13

1000 1101

8D

141

 ch 14

1010 1101

AD

173

 ch 14

1000 1110

8E

142

 ch 15

1010 1110

AE

174

 ch 15

1000 1111

8F

143

 ch 16

1010 1111

AF

175

 ch 16

1001 0000

90

144

Note on

 ch 1

1011 0000

B0

176

Control change

 ch 1

1001 0001

91

145

 ch 2

1011 0001

B1

177

 ch 2

1001 0010

92

146

 ch 3

1011 0010

B2

178

 ch 3

1001 0011

93

147

 ch 4

1011 0011

B3

179

 ch 4

1001 0100

94

148

 ch 5

1011 0100

B4

180

 ch 5

1001 0101

95

149

 ch 6

1011 0101

B5

181

 ch 6

1001 0110

96

150

 ch 7

1011 0110

B6

182

 ch 7

1001 0111

97

151

 ch 8

1011 0111

B7

183

 ch 8

1001 1000

98

152

 ch 9

1011 1000

B8

184

 ch 9

1001 1001

99

153

 ch 10

1011 1001

B9

185

 ch 10

1001 1010

9A

154

 ch 11

1011 1010

BA

186

 ch 11

1001 1011

9B

155

 ch 12

1011 1011

BB

187

 ch 12

1001 1100

9C

156

 ch 13

1011 1100

BC

188

 ch 13

1001 1101

9D

157

 ch 14

1011 1101

BD

189

 ch 14

1001 1110

9E

158

 ch 15

1011 1110

BE

190

 ch 15

1001 1111

9F

159

 ch 16

1011 1111

BF

191

 ch 16

1100 0000

C0

192

Program change

 ch 1

1110 0000

E0

224

Pitch Bend

 ch 1

1100 0001

C1

193

 ch 2

1110 0001

E1

225

 ch 2

1100 0010

C2

194

 ch 3

1110 0010

E2

226

 ch 3

1100 0011

C3

195

 ch 4

1110 0011

E3

227

 ch 4

1100 0100

C4

196

 ch 5

1110 0100

E4

228

 ch 5

1100 0101

C5

197

 ch 6

1110 0101

E5

229

 ch 6

1100 0110

C6

198

 ch 7

1110 0110

E6

230

 ch 7

1100 0111

C7

199

 ch 8

1110 0111

E7

231

 ch 8

1100 1000

C8

200

&n