Architecture MIDI

Cet article décrit l'architecture MIDI générique, indépendamment de toute implémentation de plateforme, API ou fonctionnalités spécifiques à la plateforme.

Concepts clés

Événements

Le protocole MIDI est conçu pour la communication basée sur les événements. Un événement est une indication que quelque chose s'est produit ou se produira à un moment précis. Les événements MIDI sont représentés par des messages , des paquets atomiques d'informations.

Transport

Les messages MIDI sont codés et transmis via une couche de transport , abrégée transport , qui envoie les données MIDI brutes au destinataire qui décode ensuite les données en messages.

Les transports MIDI matériels incluent :

  • Boucle de courant MIDI 1.0 avec connecteur DIN 5 broches
  • USB
  • Bluetooth basse consommation (BLE)

Représentation des messages

Une spécification de transport MIDI décrit comment transmettre des messages. Bien que l'empaquetage des messages soit spécifique au transport au niveau le plus bas, à un niveau supérieur, les applications peuvent considérer une séquence de messages ordonnée dans le temps comme un flux d'octets délimité. Cela est possible car chaque message contient suffisamment d'informations pour déterminer la longueur totale du message, à condition que le début de la limite du message soit connu.

La plupart des messages MIDI sont courts (un à trois octets), mais il est possible d'envoyer des messages plus longs via SysEx .

Horodatages

Un horodatage est une étiquette facultative attachée à un message à l'origine ou à la réception, selon le transport. L'horodatage est exprimé en unités de temps telles que des secondes ou des ticks .

En l'absence d'horodatage explicite, le système doit remplacer l'horodatage du message immédiatement précédent ou l'heure actuelle. La précision de ces horodatages, qu'ils soient explicites ou implicites, est un aspect important de la fiabilité d'un système basé sur MIDI.

Les horodatages ne font pas partie du protocole MIDI 1.0. Ils sont souvent ajoutés dans le cadre d’une API spécifique à la plateforme. Le transport BLE possède des horodatages pour indiquer la synchronisation des multiples messages individuels envoyés dans un paquet BLE.

Dispositifs

Un périphérique fournit une capacité d'entrée/sortie (E/S) à un ordinateur. Les termes périphérique MIDI et périphérique MIDI font généralement référence à tout module matériel ou logiciel prenant en charge le protocole MIDI. Dans ce document, le périphérique MIDI fait référence à l'entité physique et le périphérique MIDI décrit le module qui implémente réellement le MIDI.

Ports

Un port est un point d'interface entre les ordinateurs et les périphériques.

MIDI 1.0 utilise une prise DIN femelle à 5 broches comme port. Chaque port est soit OUT (source de données MIDI), IN (récepteur de données MIDI) ou THRU (c'est-à-dire un IN qui est directement acheminé vers un OUT ).

D'autres transports tels que USB et BLE étendent le concept de port .

Un appareil MIDI possède au moins un port OUT , un port IN ou les deux.

Le périphérique MIDI fournit un ou plusieurs flux de messages provenant de chaque port OUT et reçoit un ou plusieurs flux de messages arrivant à chaque port IN . Les termes IN et OUT sont bien entendu relatifs à un même port ; du point de vue de l'autre port, le terme inverse s'applique.

Connexion

Dans le transport MIDI 1.0, un port OUT se connecte à au plus un port IN ou THRU en raison de la nature de la boucle actuelle. Dans les transports USB et BLE, il en va de même au niveau de la couche la plus basse, bien qu'une implémentation puisse reconditionner le flux de messages afin qu'il puisse être diffusé vers plusieurs ports IN .

Câbles

Un câble MIDI 1.0 est le faisceau physique de fils qui connecte un port OUT à un port IN ou THRU . Le câble transporte uniquement des données.

Remarque : Il existe des modifications non standard du MIDI qui alimentent les deux broches inutilisées. C'est ce qu'on appelle l'alimentation fantôme .

Un câble USB est similaire, sauf qu'il existe une grande variété de types de connecteurs et que le concept IN / OUT / THRU est remplacé par le rôle hôte/périphérique.

Lors du fonctionnement en mode hôte USB, le périphérique hôte alimente le périphérique MIDI. La plupart des petits périphériques MIDI prennent une charge d'unité USB (100 mA) ou moins. Cependant, certains périphériques plus grands, ou périphériques dotés d'une sortie audio ou de lumières, nécessitent plus d'énergie que ce que le périphérique hôte peut fournir. Si vous rencontrez des problèmes, essayez un autre périphérique MIDI ou un hub USB alimenté.

Canal

Chaque flux de messages MIDI est multiplexé sur 16 canaux . La plupart des messages sont destinés à un canal spécifique, mais il existe des types de messages qui ne sont pas spécifiques à un canal. Classiquement, les canaux sont numérotés de 1 à 16, bien que représentés par des valeurs de canal allant de zéro à 15.

Si l'application a besoin de plus de 16 canaux ou d'un débit supérieur à celui qu'un flux de messages peut prendre en charge, plusieurs ports doivent être utilisés.

Dans MIDI 1.0, cela est accompli par plusieurs câbles connectant des paires de ports.

Dans le transport MIDI sur USB, un seul point de terminaison USB peut prendre en charge plusieurs ports, chacun identifié par un numéro de câble [sic]. Selon la spécification USB MIDI, le numéro de câble identifie le port virtuel au sein du point de terminaison.

Remarque : le numéro de port aurait été un terme plus précis, étant donné qu'il identifie un port.

Ainsi, un seul câble physique USB peut transporter plus d'un ensemble de 16 canaux.

Implémentation de la plateforme

Comme indiqué dans l'introduction, ces concepts MIDI génériques s'appliquent à toutes les implémentations. Pour l'interprétation des concepts sur la plateforme Android, consultez le Guide de l'utilisateur Android MIDI pour android.media.midi .