Arquitectura MIDI

Este artículo describe la arquitectura MIDI genérica, independiente 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 la 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, transporte abreviado, que envía los datos MIDI sin procesar al destinatario, quien luego decodifica los datos en mensajes.

Los transportes MIDI basados ​​en hardware incluyen:

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 más alto 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 enviar 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 origen o al recibirlo, 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 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. Dentro de 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 hembra DIN de 5 pines como puerto. Cada puerto es OUT (fuente de datos MIDI), IN (sumidero 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 de SALIDA , un puerto de ENTRADA 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, lo mismo ocurre 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 .

cabos

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

Nota: Hay modificaciones no estándar de MIDI que suministran energía a través de los dos pines no utilizados. Esto se llama energía 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 el rol 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 aceptan 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 puede suministrar el dispositivo host. Si tiene problemas, pruebe con otro periférico MIDI o un concentrador USB alimentado.

Canal

Cada flujo de mensajes MIDI se multiplexa entre 16 canales . La mayoría de los mensajes están dirigidos a un canal específico, pero hay tipos de mensajes que no son específicos del canal. Convencionalmente, los canales están numerados del uno al 16, aunque representados por valores de canal de cero a 15.

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

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

En el transporte MIDI a través de USB, un solo punto final USB puede admitir múltiples puertos, cada uno identificado por un número de cable [sic]. De acuerdo con 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 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 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 .