Mostrando entradas con la etiqueta mensajes. Mostrar todas las entradas
Mostrando entradas con la etiqueta mensajes. Mostrar todas las entradas

martes, 5 de febrero de 2008

MIDI Especificación. Mensajes excusivos.

Después de haber traducido la especificación de los mensajes midi, voy a traducir los que menos entiendo. los famosos mensajes exclusivos.
Traducido de aqúi


Mensajes Exclusivos del sistema (es decir, SysEx)

Propósito :
Se utilizan para enviar una gran cantidad de datos a un dispositivo MIDI, como un volcado de memoria de su patch(conjunto de instrumentos o datos del secuenciador o los datos de forma de onda(datos de audio). Asimismo, SysEx pueden ser utilizados para transmitir la información que es particular de un modelo de dispositivo. Por ejemplo, un mensaje SysEx podría ser usado para enviar la información del operador en un Sintetizador Roland de Modelado Físico. Esta información sería probablemente inútil para un sampler AKAI que reproduce muestras de sonido. (Por el contrario, prácticamente todos los dispositivos responden a un control de rueda de modulación, por ejemplo, así que tiene sentido tener definido un mensaje de controlador de modulación que todos los fabricantes puedan apoyar con ese fin).

Status:

Comienza con el byte de estado 0xF0. y termina con un byte de estado 0xF7 (es decir, después de los bytes de datos).

Datos:

Puede ser cualquier número de bytes de datos entre el 0xF0 inicial y el 0xF7 final. El más importante es el primer byte de datos (después del 0xF0), que debe ser una identificación del fabricante.

Errata ?????

Prácticamente todos los dispositivos MIDI definen el formato de su propio conjunto de mensajes SysEx (es decir, que sólo ellos lo entienden). El único punto en común de los mensajes SysEx de diversos modelos de dispositivos MIDI es que todos los mensajes SysEx debe comenzar con un estado 0xF0 y terminar con un estado 0xF7. En otras palabras, este es el único mensaje MIDI que tiene 2 bytes de estado, uno al inicio y otro al final.
Entre estos dos bytes de estado, cualquier número de bytes de datos (todos a cero el bit # 7, es decir, el valor de 0 a 127) puede ser enviado. Por eso necesita un SysEx 0xF7 estado byte al final, de modo que un dispositivo MIDI sabrá cuando el final del mensaje aparece, incluso si los datos del mensaje no es entendido por el dispositivo (es decir, el dispositivo no sabe Exactamente el número de bytes de datos a esperar antes del 0xF7).

Por lo general, el primer byte de datos (después del 0xF0) será un ID definido por el fabricante. La organización MMA ha asignado valores del byte ID a varios fabricantes, de manera que un dispositivo puede determinar si un mensaje SysEx se destina para el. Por ejemplo, un dispositivo de Roland espera un byte ID de 0x41. Si un dispositivo de Roland recibe un mensaje SysEx cuyo byte ID no es 0x41, el aparato hace caso omiso de todos los del resto de los bytes hasta que llega el byte final 0xF7 que indica que el mensaje SysEx ha terminado.

El objetivo de los restantes bytes de datos, que pueden ser muchos, son determinados por el fabricante . Normalmente, los fabricantes al ID del fabricante le sigue un byte de Número de identificación asi, un dispositivo no sólo puede determinar que hay un mensaje SysEx correcto del fabricante, sino también que es un mensaje SysEx específicamente para este modelo. Luego, después de la ID del modelo puede seguir otro byte que el dispositivo utiliza para determinar el tipo de mensaje SysEx , y, por lo tanto, el número de bytes de datos más que seguirán. Algunos fabricantes tienen un byte de checksum, (por lo general, justo antes de la 0xF7) que se utiliza para verificar la integridad de la transmisión del mensaje.
El byte de estado 0xF7 se utiliza para marcar el final de un mensaje SysEx. Nunca debe ocurrir sin precederle un Estado 0xF0. En el caso de que un dispositivo experimente tal condición (es decir, tal vez el cable MIDI se conectó a mitad de la transmisión de un mensaje SysEx), el dispositivo debe ignorar el Estado 0xF7.
Además, aunque el 0xF7 supone que marca el final de un mensaje SysEx, de hecho, cualquier byte de estado (a excepción de la categoría de mensajes en tiempo real), debe causar el mensaje SysEx como "terminado" (es decir, "abortado". Ya que tal situación indica una situación anormal del MIDI). Por ejemplo, si un 0x90 se envió después de un 0xF0 (pero antes de la 0xF7), entonces el mensaje SysEx se considera abortado en ese momento. Cabe señalar que, como todos los Mensajes Comunes del Sistema, SysEx anula cualquier 'runing status' actual. En otras palabras, el siguiente mensaje de Categoria de Voz (tras el mensaje SysEx) debe comenzar con un Estado.


Vaaaaya, creo que lo he entendio casi todo.
La unica duda que tengo es ese : (a excepción de la categoría de mensajes en tiempo real)

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.