MIDI Generic Messages
Jordi Bartolomé 10-1-2013

4.1-Categoría System Common
 
0xF0 = SysEx - System Exclusive ( categoría System Common ) :
Permite enviar a los equipos conectados al bus MIDI información de diferente índole ( datos de configuración, variables de instrumentos, muestras de sonido etc. ). Los mensajes SysEx son un caso especial dentro del protocolo MIDI, ya que son el único tipo de mensaje que utiliza dos status bytes: el status byte 0xF0 para indicar el inicio de la trama y el el status byte 0xF7 para indicar el final. Los bytes comprendidos entre ambos status bytes contienen la información propiamente dicha, y la organización y significado de estos bytes variará dependiendo del dispositivo al que vayan dirigidos ( datos de configuración, datos de instrumentos, estado de variables internas etc. ). La información contenida dentro de estos mensajes puede tener cualquier formato, por lo que probablemente sólo será comprensible por el dispositivo o dispositivos a los que vaya dirigida, y esta es la razón que obliga a utilizar un segundo status byte para indicar el final del mensaje. Los bytes de información no deberían contener el byte 0xF7 ni ningún otro status byte, pues esto hace que los equipos conectados al bus den por terminada la trama SysEx.
 
Este comando se puede utilizar para infinidad de tareas, por lo que al enviarlo se deberá tener en cuenta el comportamiento o efectos que pueda tener sobre el equipo, ya que si p.ej, sabemos que el envío de una determinada trama SySex deja al equipo destino procesando unos segundos, deberemos evitar enviarlo mientras el músico está interpretando, ya que esto detendría el instrumento.
 
En función de su estructura se pueden distinguir dos tipos de mensajes SysEx, los “normales” y los “universales”. En los mensajes SysEx "normales" el primer byte tras el status byte 0xF0 suele ser el identificador del fabricante ( Manufacturer ID ), el siguiente el identificador del dispositivo ( Device ID ), y por último el identificador de modelo ( Model ID ), de este modo los equipos conectados al bus MIDI pueden identificar si un determinado mensaje SysEx es para ellos o no. Los equipos destino de la trama sabrán cómo interpretar los bytes de información que reciben, mientras que el resto de equipos sabrán que esa información no es para ellos y la descartaran. Los dispositivos de pruebas, o prototipos, deberán utilizar el Manufacturer ID "Educational" 0x7D.
 
En los mensajes SysEx “universales” al status byte le siguen dos valores genéricos que no se corresponden con ningún fabricante real, y que deberían ser detectados por todos los dispositivos MIDI. Estos valores son:

  0x7F: Realtime ID : para identificar los mensajes que han de ser tratados de inmediato, en tiempo real
  0x7E: Non Realtime ID: para los mensajes que no necesitan ser tratados de forma inmediata y su tratamiento se puede retrasar.
 
Estos son los códigos que identifican los mensajes SysEx universales ( Universal SysEx Messages ) y tras estos se encuentran el número de canal SysEx al que refiere el mensaje (SysEx Channel ), el subidentificador del mensaje (Sub ID), y el subidentificador 2 del mensaje (Sub ID 2).
 
En resumen, se puede decir que existen dos tipos de mensajes SysEx, los "normales", y los "universales". Los mensajes SysEx "normales" tienen la estructura:

  Trama: Status Byte + Data Byte 0 + Data Byte 1 + ... + Data Byte n + Status Byte

  Status byte: 0xF0: identificador de inicio del mensaje SysEx
  Data Byte 0: Manufacturer ID: con el identificador del fabricante ( diferente de 0x7E y 0x7F )
  Data Byte 1: Model ID: con el identificador del modelo
  Data Byte 2: Device ID: con el identificador del dispositivo
 ... bytes con los datos de la trama  
  Status byte: 0xF7: identificador del fin del mensaje SysEx

Mientras que los mensajes SysEx “universales” tienen la estructura:

  Trama: Status Byte + Data Byte 0 + Data Byte 1 + ... + Data Byte n + Status Byte

  Status byte: 0xF0: identificador de inicio del mensaje SysEx
  Data Byte 0: 0x7E o 7F: para identificar los mensajes RealTime o Non RealTime
  Data Byte 1: SysEx Channel Number: ( 0 a 126 ) con el identificador del canal SysEx al que refiere el mensaje ( aunque suelen coincidir, no confundir con canal MIDI ). El valor 127 indica que el mensaje es para todos.
  Data Byte 2: Sub ID: el subidentificador de la trama SysEx Universal
  Data Byte 3: Sub ID 2: el subidentificador 2 de la trama SysEx Unviersal
  ... bytes con los datos de la trama
  Status byte: 0xF7: identificador del fin del mensaje SysEx
 
Algunos ejemplos de mensajes SysEx universales son:
 
GM System Enable/Disable: para activar o desactivar los patchs de sonido General Midi. Este es útil en aquellos dispositivos que además de los patchs propios del GM disponen de otros propios diferentes a los establecidos por GM. Mediante este comando podremos activar o desactivar los diferentes patchs.

  0xF0 SysEx
  0x7E Non-Realtime
  0x7F The SysEx channel. Could be from 0x00 to 0x7F. Here we set it to "disregard channel".
  0x09 Sub-ID-- GM System Enable/Disable.
  0xNN Sub-ID2--NN=00 for disable, NN=01 for enable
  0xF7 End of SysEx

Master volume: Este se utiliza para controlar el volumen general de un determinado instrumento.

  0xF0 SysEx
  0x7F Realtime
  0x7F The SysEx channel. Could be from 0x00 to 0x7F. Here we set it to "disgreagard channel".
  0x04 Sub-ID -- Device Control
  0x01 Sub-ID2 -- Master Volume
  0xLL Bits 0 to 6 of a 14-bit volume
  0xMM Bits 7 to 13 of a 14-bit volume
  0xF7 End of sysex

0xF1 = MTC Quarter Frame Message ( categoría System Common ) :
Lo pueden utilizar algunos dispositivos máster que controlan la secuencia de palyback de un esclavo para mantenerlo sincronizado.
  
  Trama: Stauts Byte + Data Byte 0

  Status byte: 0xF1 identifcador de incio del mensaje MTC Quarter Frame
  Data Byte 0: valor de código de tiempo ( de 0d a 127d )
  
0xF2 = Song position pointer ( categoría System Common ) :
Este mensaje se utiliza para indicar a los equipos MIDI esclavos que actúan reproduciendo una melodía, que continúen la reproducción a partir de un determinado punto. Es decir que permiten establecer el punto de reproducción de un determinado tema a un equipo MIDI esclavo que actúa reproduciendo una melodía. No sirve para iniciar ni parar la reproducción, sólo para indicar al equipo que sitúe su "cursor de reproducción" en una determinada posición.
 
  Trama: Stauts Byte + Data Byte 0
  
  Status byte: 0xF2 identificador de inicio del mensaje Song Position Pointer
  Data Byte 0: los 7 bits bajos del Byte 0 y Byte 1 se combinan para formar un valor de 14 bits. Los 7 primeros bits del Byte 0 ( bits del 0 a 6 ) se corresponden con los 7 bits bajos ( bits del 0 al 7 ) del valor de 14 bits.
  Data Byte 1: los 7 bits bajos del Byte 0 y Byte 1 se combinan para formar un valor de 14 bits. Los 7 primeros bits del Byte 1 ( bits del 0 a 6 ) se corresponden con los 7 bits altos ( bits del 7 al 13 ) del valor de 14 bits.
  
El valor contenido en Data Byte 0 y Data Byte 1 indica la pulsación MIDI de la canción en la que continuar la reproducción. Las canciones se inician en la pulsación MIDI 0, y cada pulsación se extiende 6 ciclos de reloj MIDI. Cada 24 ciclos de reloj MIDI son una negra, por lo que en cada negra hay 4 pulsaciones MIDI. Una pulsación es una semicorchea, es decir la 1/4 parte de una negra, 1/8 de una blanca, o 1/16 de una redonda. Si queremos operar en términos de tiempo deberemos considerar el tempo ( BPMs - negras por minuto ) de la melodía.
  
0xF3 = Song Select ( categoría System Common ) :
Este mensaje lo pueden utilizar los equipos MIDI master para indicar a otros equipos MIDI esclavos secuenciadores ( equipos que reproducen canciones o secuencias de notas ) que cambien a otra secuencia ( a otro número de canción ). En el momento que el equipo esclavo recibe este mensaje deberá cambiar el número de secuencia y situar el cursor de reproducción de nuevo a 0. El master deberá utilizar el mensaje Song position pointer para situar el cursor de reproducción en otra posición.
  
  Trama: Stauts Byte + Data Byte 0
  
  Status byte: 0xF3 identificador de inicio del mensaje Song Select
  Data Byte 0: valor con el numero de cancion ( de 0 a 127d )
  
0xF6 = Tune Request ( categoría System Common ) :
Al recibir este mensaje el equipo debe ejecutar el proceso de autoafinación ( si es que lo tiene ).
  
  Trama: Stauts Byte
  
  Status byte: 0xF6 identificador de mensaje Tune Request
  Data Byte: no utiliza
  
4.2-Categoría System Realtime

0xF8 = MIDI Clock ( categoría System Realtime ) :
Este mensaje sirve para mantener sincronizados, al mismo tempo, diferentes equipos que se encuentran conectados al mismo bus MIDI. Es el máster quien va enviando periódicamente este mensaje a intervalos regulares proporcionales al tempo que tiene programado.
  
  Trama: Stauts Byte
  
  Status byte: 0xF8 identificador de mensaje MIDI Clock
  Data Byte: no utiliza
  
Cada mensaje es un ciclo de reloj y cada 24 ciclos de reloj son una negra, 12 ciclos de reloj una corchea y 6 ciclos de reloj una semicorchea ( una pulsación MIDI son 6 ciclos de reloj ). El número de ciclos de reloj enviados por unidad de tiempo dependerá del tempo programado en el master. El dispositivo master puede ir contando los ciclos de reloj recibidos y sincronizar el ritmo de reproducción a la cadencia con que recibe estos mensajes.
  
0xFA = MIDI Start ( categoría System Realtime ) :
Este mensaje lo pueden utilizar los equipos MIDI master para indicar a otros equipos MIDI esclavos secuenciadores ( equipos que reproducen canciones o secuencias de notas ) que inicien la reproducción. La reproducción se inicia desde la primera pulsación MIDI, de modo que cuando un equipo esclavo recibe este comando resetea el cursor de reproducción y comienza desde el principio.
  
  Trama: Stauts Byte
  
  Status byte: 0xFA identificador del mensaje MIDI Start
  Data Byte: no utiliza
  

0xFB = MIDI Continue ( categoría System Realtime ) :
Los equipos master MIDI pueden utilizar este mensaje para indicar a otros equipos MIDI esclavos secuenciadores ( equipos que reproducen canciones o secuencias de notas ) que continuen la reproducción de la secuencia desde el punto en que se detuvo. Viene a ser como pulsar el play de nuevo tras haber pulsado el pause.

  Trama: Stauts Byte
  
  Status byte: 0xFB identifcador del mensaje MIDI Continue
  Data Byte: no utiliza
  
0xFC = MIDI Stop ( categoría System Realtime ) :
Los equipos master MIDI pueden utilizar este mensaje para indicar a otros equipos MIDI esclavos secuenciadores ( equipos que reproducen canciones o secuencias de notas ) que detengan la reproducción. Al detenerse conservan el cursor de reproducción en la posición actual.
  
  Trama: Stauts Byte
  
  Status byte: 0xFC identificador del mensaje MIDI Stop
  Data Byte: no utiliza
  
0xFE = Active Sense ( categoría System Realtime ) :
En caso de que no haya actividad en el bus MIDI, el equipo MIDI máster enviará este mensaje cada 300ms a los esclavos para indicarles que a pesar de no estar enviando datos hay conexión y las comunicaciones son buenas. El mensaje Active Sense es como un mensaje de "keepalive". Pocos dispositivos MIDI lo implementan, por lo que solo debera esperarse tras el primer mensaje de Active Sense recibido. Es decir que si el bus MIDI está inactivo y un equipo esclavo no recibe ningún mensaje Active Sense no debe considerar que las comunicaciones se han perdido, no obstante si recibe uno varios mensajes Active Sense, y de repente deja de recibirlos ( sin haber actividad en el bus ) entonces sí puede considerar que hay problemas de comunicaciones en el bus MIDI.
  
  Trama: Stauts Byte
  
  Status byte: 0xFE identificador del mensaje Active Sense
  Data Byte: no utiliza
  
0xFF = Reset ( categoría System Realtime ) :
Al recibir este mensaje, el equipo ha de resetearse situándose en condiciones iniciales, a menudo en las misma situación en que el equipo se encuentra cuando se enciende.Esto implica resetear todas las variables que controlan la reproducción de las notas, los cursores de reproducción etc. Este mensaje solo se envía cuando el intérprete lo pide, pero nunca de forma automática.
  
  Trama: Stauts Byte
  
  Status byte: 0xFF identificador del mensaje Reset
  Data Byte: no utiliza
  
Página anterior (pag 2/4)   Volver al índice   Página siguiente (pag 4/4)
Regresar al índice de documentos