Le protocole MIDI :
messages et running status

 

Structure des messages MIDI

Une belle image expliquant la structure des messages Midi se trouve dans "Le livre d'or de la norme MIDI" (Christian Braut, Sybex). Un message Midi est presenté comme un petit train, avec une locomotive et des wagons. Les rails représentent le câble midi support de l'information.

La locomotive est l'octet d'en-tête. Dans le cas qui nous intéresse, les messages Control Change et Note On, elle est suivie de deux wagons transportant l'information, chacun ayant un ròle spécifique. Ils ne sont pas interchangeables. Le premier représente le numéro de la note ou du contròleur, le second représente la valeur ou la vélocité.

Pour faire passer plus d'informations, il n'est pas nécessaire de répéter les locomotives (en-têtes) qui ont la même destination : on peut accrocher à la suite tous les wagons en respectant l'alternance numéro-valeur. Cela permet d'économiser un tiers de bande passante, ce qui n'est pas négligeable et d'atteindre les 1500 informations par secondes. C'est ce qu'on appelle le running status, chaque système devant garder en mémoire quel était le type de locomotive.

En revanche, cette particularité de la norme Midi peut poser problème, dans le cas où la locomotive n'a pas été vue.

Conséquences du running status Midi sur les actionneurs

En particulier, une carte qui démarre ou une carte qui a subi un débranchement/rebranchement du cable Midi n'a pas forcément vu passer l'en-tète. Par sécurité, elle se met en attente d'un nouvel en-tète pour réussir à interpréter correctement les informations qui circulent. Tant qu'elle n'a pas eu d'en-tète, elle laisse défiler l'information sans l'exploiter, elle ne peut mème pas différencier un numéro d'une valeur, elle ne sait pas si elle a affaire à un Note On ou à un Control Change, ...

Des logiciels comme Max MSP ou Pure-Data utilisent à fond la notion de running status. Cela peut provoquer des problèmes avec les cartes actionneurs. On observe parfois comme un dialogue de sourd : le logiciel envoie bien les informations, sans répéter l'en-tète, le cable Midi est bon, l'interface Midi-USB clignote, tout semble correctement branché, sauf que... la carte ne répond pas. En effet, à cause d'un démarrage tardif ou d'un débranchement/rebranchement à chaud, elle attend un nouvel en-tète pour se sentir concernée par les données.

La solution est toutefois simple : il suffit de forcer l'envoi d'un nouvel en-tète, ce qui peut se faire ponctuellement ou régulièrement. Pour cela, on envoie un message d'un autre type, non utilisé par la carte (par exemple un Pitch Bend ou un Poly After Touch), qui force le logiciel à envoyer un en-tète pour ce message différent ponctuel puis un nouvel en-tète pour les messages de commande qui nous intéresse. La carte, recevant cet en-tète, se resynchronise immédiatement et obéit ensuite au running status dépendant de ce nouvel en-tète.

Si vous êtes amené à beaucoup interrompre les alimentations des cartes actionneurs au cours du développement d'un projet, nous vous suggérons d'insérer un envoi récurrent de ce type de message dans vos patchs, avec un metronome (par exemple, voir patch).

 

Protocole Midi

Norme Midi et électricité