Architecture MIDI

Cet article décrit l'architecture MIDI générique, indépendamment de toute implémentation de plate-forme, API ou fonctionnalité spécifique à la plate-forme.

Concepts clés

Événements

Le protocole MIDI est conçu pour la communication basée sur des événements. Un événement indique qu'un événement s'est produit ou se produira à un moment donné. Les événements MIDI sont représentés par des messages, des ensembles d'informations atomiques.

Transport

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

Les transports MIDI basés sur le matériel incluent les éléments suivants:

  • Boucle de courant MIDI 1.0 avec connecteur DIN à 5 broches
  • USB
  • Bluetooth Low Energy (BLE)

Représentation des messages

Une spécification de transport MIDI décrit comment transmettre des messages. Bien que le conditionnement 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 par ordre de 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.

Codes temporels

Un code temporel est un libellé facultatif associé à un message au moment de son envoi ou de sa réception, en fonction du transport. Le code temporel est exprimé en unités de temps telles que des secondes ou des tic.

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

Les codes temporels ne font pas partie du protocole MIDI 1.0. Ils sont souvent ajoutés dans le cadre d'une API spécifique à la plate-forme. Le transport BLE comporte des codes temporels pour indiquer le moment des multiples messages individuels envoyés dans un seul paquet BLE.

Appareils

Un périphérique fournit des fonctionnalités d'entrée/sortie (E/S) à un ordinateur. Les termes périphérique MIDI et appareil MIDI désignent généralement tout module matériel ou logiciel compatible avec le protocole MIDI. Dans ce document, le terme périphérique MIDI fait référence à l'entité physique, et appareil 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 OUT (source de données MIDI), IN (point de destination des données MIDI) ou THRU (IN directement acheminé vers un OUT).

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

Un appareil MIDI comporte au moins un port OUT, un port IN ou les deux.

L'appareil 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 (Entrée) et OUT (Sortie) sont bien entendu relatifs à un port. Du point de vue de l'autre port, le terme inverse s'applique.

Connexion

Dans le transport MIDI 1.0, un port OUT ne se connecte qu'à un seul port IN ou THRU en raison de la nature de la boucle de courant. 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é sur plusieurs ports IN.

Câbles

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

Remarque:Des modifications non standard du MIDI fournissent de l'alimentation via les deux broches inutilisées. C'est ce qu'on appelle la tension 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.

En mode hôte USB, l'appareil hôte alimente le périphérique MIDI. La plupart des petits périphériques MIDI utilisent une charge d'unité USB (100 mA) ou moins. Toutefois, certains périphériques plus volumineux, ou périphériques avec sortie audio ou éclairage, nécessitent plus d'énergie que l'appareil hôte ne peut fournir. En cas de problème, essayez avec un autre périphérique MIDI ou un hub USB alimenté.

Chaîne

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. Les canaux sont généralement numérotés de 1 à 16, mais représentés par des valeurs de canal comprises entre 0 et 15.

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

Dans MIDI 1.0, cela se fait à l'aide de plusieurs câbles reliant des paires de ports.

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

Remarque:Le terme numéro de port aurait été plus précis, car il identifie un port.

Ainsi, un seul câble physique USB peut transporter plusieurs ensembles de 16 canaux.

Implémentation de la plate-forme

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 plate-forme Android, consultez le Guide de l'utilisateur MIDI Android pour android.media.midi.