martes, 5 de febrero de 2008

MIDI Especificación. Mensajes.

Primer post sobre el protocolo midi.
Esto es una tradución de aquí
Es una especie de borrador que dios 'menguante' trataré de formalizar.


Voy a tratar de ahondar todo lo posible desde mi experiencia.(¡ejem!.Que puede ser muy poca).

MENSAJES MIDI.

El protocolo MIDI está compuesto de mensajes. Un mensaje consiste en una cadena (es decir, serie) de bytes (de 8 bits). MIDI ha definido muchos de esos mensajes. Algunos mensajes constan de sólo 1 byte. Otros mensajes tienen 2 bytes. Otros tienen 3 bytes. Un tipo de mensaje MIDI puede tener un número ilimitado de bytes. Una cosa que todos los mensajes tienen en común es que el primer byte del mensaje es el byte de estado. Se trata de un byte especial porque es el único byte que tiene a 1 el bit #7. Cualquier otro byte del mensaje tiene el bit #7 a 0. Por lo tanto, siempre se puede detectar el comienzo un mensaje MIDI, ya que es cuando se recibe un byte con el bit # 7 a 1. El byte de estado estará entonces en el rango de 0x80 a 0xFF. El resto de bytes del mensaje (es decir, los bytes de datos, si existen) estarán en el rango 0x00 a 0x7F. (Tenga en cuenta que estoy usando el método que tiene el lenguaje de programación C para indicar un valor hexadecimal con el prefijo 0x.).

Los bytes de estado de 0x80 a 0xEF son para los mensajes que pueden ser difundidos en cualquiera de los 16 canales MIDI(en estos mensajes, hay que indicar a cual de los 16 canales afecta). Debido a esto, estos son llamados mensajes de voz. (Mi preferencia es decir, que estos mensajes pertenecen a la categoría de voz, algunos les llaman mensajes de canal.). Estos bytes de estado, hay que romperlos en dos nibbles de 4bits.Por ejemplo, un byte de estado 0x92 puede ser dividido en 2 nibbles con valores de 9 (nibble alto) y 2 (nibble bajo). El nible alto le indica qué tipo de mensaje MIDI es. Estos son los posibles valores del nibble alto, y qué tipo de mensaje de categoría voz(canal) representa cada uno:
  • 8 = Note Off
  • 9 = Note On
  • A = AfterTouch (ie, key pressure)
  • B = Control Change
  • C = Program (patch) change
  • D = Channel Pressure
  • E = Pitch Wheel
Así, por ejemplo, nuestro byte de estado 0x92, corresponde a a un mensaje del tipo Nota On (es decir, el nibble alto es 9). ¿Cuál es el significado del nibble bajo 2 ?. Esto significa que el mensaje es para el canal MIDI 2. Hay 16 posibles (lógico) canales MIDI, siendo 0 el primero. Así que, este mensaje es una Nota On para el canal 2. ¿Qué byte de estado se especifica para un Cambio de Programa en el canal 0? El nibble alto para un cambio de programa es C, y el nibble bajo tendría que ser 0 para el canal 0. Así, la byte de estado sería 0xC0.¿Qué tal un Cambio de programa en el canal 15 (es decir, el último canal MIDI). Una vez más, el nibble alto es C, pero el nibble bajo es en este caso F (es decir, el digito 15 en hexadecimal ). Así, el byte de estado sería 0xCF.
NOTA: Aunque el byte de estado MIDI cuenta con los 16 canales MIDI, como los números de 0 a F (es decir, de 0 a 15), todos los aparatos MIDI (incluyendo los programas informáticos) muestra un número de canal para el músico como del 1 al 16. Así, un byte de Estado enviado al canal MIDI 0 se considera el "canal 1" en la medida de lo es el músico en cuestión. Esta discrepancia entre el número de canal del byte de estado , y el canal MIDI al que el músico "cree" mandar el mensaje, se acepta porque la mayoría de los seres humanos empieza a contar las cosas a partir del 1 , en lugar de 0.

Los bytes de estado de 0xF0 a 0xFF, son para los mensajes que no están asociados a ningún canal (y por lo tanto todos dispositivos MIDI(en el sentido de dispositivos que respondena sólo un determinado canal) siempre pueden "escuchar" y optar por actuar con respecto a estos mensajes. Esto contrasta con la categoría de mensajes de voz, que solo actuan en un dispositivo MIDI configurado para responder a los mensajes de un determinado canal cuando coincide el número de canal del mensaje y el del dispositivo.). Estos bytes estado(0xF0 a 0xFF) se utilizan para los mensajes que llevan la información de interés para todos los dispositivos MIDI, como por ejemplo el sincronizado de todos los dispositivos de reproducción a un momento determinado. (Por el contrario, los mensajes de categoría de voz se refieren a las partes de musica individual que podrían desempeñar cada uno de los instrumentos, por lo que el esquema del nibble de canal permite a los dispositvos responder a su propio canal MIDI haciendo caso omiso de los mensajes de categoría voz destinados a otro dispositivo en otro canal).

Estos bytes estado(0xF0 a 0xFF) se dividen en dos categorías. Los Mensajes con bytes de estado de 0xF0 a 0xF7 son llamados mensajes comunes del sistema. Los mensajes con bytes de estado de 0xF8 a 0xFF son llamados mensajes en tiempo real del sistema. Las implicaciones de estos tipos se discutirám más adelante.

En realidad, algunos bytes de estado dentro de este rango(0xF0 a 0xF7) no están definidos por la especificación MIDI a la fecha, y se reservan para uso futuro. Por ejemplo, los bytes de estado 0xF4, 0xF5, 0xF9, y 0xFD no se utilizan. Si un dispositivo MIDI recibe dichos bytes de estado, debería ignorar el mensaje. Véase la sección: Ignorando mensajes MIDI.

Lo siguiente sería una descripción de cada tipo de mensaje. La descripción de lo que el mensaje significa, lo que significa su byte de estado, y si tiene algún posteriores bytes de datos y el tipo de información que llevan. En general, estas descripciones dependen de lo que haga dispositivo de recibir dichos mensajes (es decir, lo que esperamos que el dispositivo haga al recibir el mensajes). En su caso, tambien puede haber comentarios acerca de los dispositivos que transmiten estos mensajes.

------------------------
La especificación general de los mensajes esta super bien explicada. Otra cosa es verlo en la práctica.

No hay comentarios: