arquitectura midi

Este artículo describe la arquitectura MIDI genérica, independientemente de cualquier implementación de plataforma, API o características específicas de la plataforma.

Conceptos clave

Eventos

El protocolo MIDI está diseñado para comunicación basada en eventos. Un evento es una indicación de que algo sucedió o sucederá en un momento específico. Los eventos MIDI están representados por mensajes , paquetes atómicos de información.

Transporte

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

Los transportes MIDI basados ​​en hardware incluyen:

  • 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 una secuencia de mensajes ordenada en el tiempo como un flujo de bytes demarcado. Esto es posible porque cada mensaje contiene suficiente información 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 existe la posibilidad de mensajes más largos a través de SysEx .

Marcas de tiempo

Una marca de tiempo es una etiqueta opcional adjunta a un mensaje en el momento de su origen o al recibirlo, según el transporte. La marca de tiempo se expresa en unidades de tiempo como segundos o ticks .

En ausencia de una marca de tiempo explícita, el sistema debe sustituir la marca de tiempo del mensaje inmediatamente 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 momento de los múltiples mensajes individuales enviados dentro de un paquete BLE.

Dispositivos

Un periférico proporciona capacidad de entrada/salida (E/S) para una computadora. Los términos periférico MIDI y dispositivo MIDI comúnmente se refieren a cualquier módulo de hardware o software que admita el protocolo MIDI. En este documento, periférico MIDI se refiere a la entidad física y dispositivo MIDI describe el módulo que realmente implementa MIDI.

Puertos

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

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

Otros transportes como USB y BLE amplían el concepto de puerto .

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

El dispositivo MIDI proporciona flujos de mensajes que se originan en cada puerto de SALIDA y recibe flujos de mensajes que llegan a cada puerto de ENTRADA . Los términos IN y OUT son, por supuesto, relativos 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 como máximo a un puerto IN o THRU debido a la naturaleza del bucle actual. En los transportes USB y BLE, ocurre lo mismo en la capa más baja, aunque una implementación puede reacondicionar el flujo de mensajes para que pueda transmitirse a múltiples puertos IN .

cables

Un cable MIDI 1.0 es el conjunto físico de cables que conecta un puerto de SALIDA a un puerto de ENTRADA o THRU . El cable solo transporta datos.

Nota: Existen modificaciones no estándar del MIDI que suministran energía a través de los dos pines no utilizados. Esto se llama poder fantasma .

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

Cuando se opera 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 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 el dispositivo host puede suministrar. Si tiene problemas, pruebe con otro periférico MIDI o un concentrador USB con alimentación.

Canal

Cada flujo de mensajes MIDI se multiplexa en 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. Convencionalmente, los canales están numerados del uno al 16, aunque representados por valores de canal del cero al 15.

Si la aplicación necesita más de 16 canales o un rendimiento superior al que puede soportar un flujo de mensajes, entonces se deben utilizar varios puertos.

En MIDI 1.0, esto se logra mediante múltiples cables que conectan pares de puertos.

En el transporte MIDI sobre USB, un único punto final USB puede admitir múltiples 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 punto final.

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

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

Implementación de plataforma

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