Arquitectura MIDI

En este artículo, se describe la arquitectura genérica de MIDI, independientemente de cualquier implementación de plataforma, API o funciones específicas de la plataforma.

Conceptos clave

Eventos

El protocolo MIDI está diseñado para la comunicación basada en eventos. Un evento es una indicación de que algo sucedió o sucederá en un momento determinado. Los eventos MIDI se representan con mensajes, paquetes atómicos de información.

Transporte

Los mensajes MIDI se codifican y entregan a través de una capa de transporte, abreviada como transporte, que envía los datos MIDI sin procesar al destinatario, que luego decodifica los datos en mensajes.

Entre los transportes MIDI basados en hardware, se incluyen los siguientes:

  • Bucle de corriente MIDI 1.0 con conector DIN de 5 pines
  • USB
  • Bluetooth de bajo consumo (BLE)

Representación de mensajes

Una especificación de transporte MIDI describe cómo transmitir mensajes. Aunque el empaquetado de mensajes es específico del transporte en el nivel más bajo, en un nivel superior, las aplicaciones pueden considerar que una secuencia de mensajes ordenados en el tiempo es un flujo de bytes demarcado. Esto es posible porque cada mensaje contiene información suficiente para determinar la longitud total del mensaje, siempre que se conozca el inicio del límite del mensaje.

La mayoría de los mensajes MIDI son cortos (de uno a tres bytes), pero hay la posibilidad de enviar mensajes más largos a través de SysEx.

Marcas de tiempo

Una marca de tiempo es una etiqueta opcional que se adjunta a un mensaje en el origen o en el momento de la recepción, según el transporte. La marca de tiempo se expresa en unidades de tiempo, como segundos o tics.

En ausencia de una marca de tiempo explícita, el sistema debe reemplazar la marca de tiempo del mensaje anterior o la hora actual. La precisión de estas marcas de tiempo, ya sean explícitas o implícitas, es un aspecto importante de la confiabilidad de un sistema basado en MIDI.

Las marcas de tiempo no forman parte del protocolo MIDI 1.0. A menudo, se agregan como parte de una API específica de la plataforma. El transporte BLE tiene marcas de tiempo para indicar el tiempo de los múltiples mensajes individuales enviados dentro de un paquete BLE.

Dispositivos

Un periférico proporciona capacidades de entrada y salida (E/S) a una computadora. Los términos periférico MIDI y dispositivo MIDI suelen hacer referencia a cualquier módulo de hardware o software que admita el protocolo MIDI. En este documento, periférico MIDI hace referencia a la entidad física y dispositivo MIDI describe el módulo que implementa MIDI.

Puertos

Un puerto es un punto de interfaz entre computadoras y periféricos.

MIDI 1.0 usa un conector DIN hembra de 5 pines como puerto. Cada puerto es OUT (fuente de datos MIDI), IN (sumidero de datos MIDI) o THRU (es decir, un IN que se enruta directamente a un OUT).

Otros transportes, como USB y BLE, extienden el concepto de puerto.

Un dispositivo MIDI tiene al menos un puerto OUT, IN o ambos.

El dispositivo MIDI proporciona flujos de mensajes que se originan en cada puerto OUT y recibe flujos de mensajes que llegan a cada puerto IN. Por supuesto, los términos IN y OUT se refieren a un puerto. Desde la perspectiva del otro puerto, se aplica el término inverso.

Conexión

En el transporte MIDI 1.0, un puerto OUT se conecta a un máximo de un puerto IN o THRU debido a la naturaleza del bucle actual. En los transportes USB y BLE, sucede lo mismo en la capa más baja, aunque una implementación puede volver a condicionar el flujo de mensajes para que se pueda transmitir a varios puertos IN.

Cables

Un cable MIDI 1.0 es el manojo físico de cables que conecta un puerto OUT a un puerto IN o THRU. El cable solo transmite datos.

Nota: Existen modificaciones no estándar en MIDI que suministran energía a través de los dos pines que no se usan. Esto se denomina alimentación fantasma.

Un cable USB es similar, excepto que hay una amplia variedad de tipos de conectores, y el concepto de IN/OUT/THRU se reemplaza por el rol de host o periférico.

Cuando funciona en modo host USB, el dispositivo host suministra energía al periférico MIDI. La mayoría de los periféricos MIDI pequeños requieren una carga de una unidad USB (100 mA) o menos. Sin embargo, algunos periféricos más grandes, o periféricos con salida de audio o luces, requieren más energía de la que puede suministrar el dispositivo host. Si tienes problemas, prueba con otro periférico MIDI o un concentrador USB con alimentación.

Canal

Cada flujo de mensajes MIDI se multiplexa entre 16 canales. La mayoría de los mensajes se dirigen a un canal específico, pero hay tipos de mensajes que no son específicos de un canal. De manera convencional, los canales se numeran del uno al 16, aunque se representan con valores de canal de cero a 15.

Si la aplicación necesita más de 16 canales o una capacidad de procesamiento superior a la que puede admitir una transmisión de mensajes, se deben usar varios puertos.

En MIDI 1.0, esto se logra con varios cables que conectan pares de puertos.

En el transporte MIDI a través de USB, un solo extremo USB puede admitir varios puertos, cada uno identificado por un número de cable [sic]. Según la especificación USB MIDI, el número de cable identifica el puerto virtual dentro del extremo.

Nota: Número de puerto habría sido un término más preciso, ya que identifica un puerto.

Por lo tanto, un solo cable físico USB puede transportar más de un conjunto de 16 canales.

Implementación de la plataforma

Como se señaló en la introducción, estos conceptos genéricos de MIDI se aplican a todas las implementaciones. Para interpretar los conceptos en la plataforma de Android, consulta la guía del usuario de MIDI para Android sobre android.media.midi.