Les Codes MIDI


Nous ne parlerons ici que des codes indispensables pour la commande d'un orgue.

Les données

Les données MIDI sont transmises sur 8 bits. Ce groupe de 8 bits est nommé : byte. Lors de la transmission, un premier byte est émis pour signifier une commande. Selon le type de message à transmettre, ce premier byte est suivi de 1 ou 2 autres bytes.

Le premier bit d'un byte détermine si on a à faire à une commande ou à une donnée. Comme le byte est composé de 8 bits et qu'on en a déjà utilisé un (le 1er), il en reste 7 pour définir une grandeur. Dans ce cas, cette grandeur devra être comprise entre 0 et 127 (2puissance7).

Dans le tableau ci-dessous, petite explication avec des 0 et des 1.

1000 0000
Commande (status byte)
0000 0000
Donnée (data byte)

Le premier bit est en rouge.

Le premier byte transmi est toujours une commande. les quatre bits qui suivent (en bleu) vont, en général, porter le numéro du canal MIDI auquel les données qui suivent s'adressent. On voit qu'il n'y a que quatre bits pour coder ce numéro de canal. Ceci explique qu'il ne peut y avoir que 16 canaux MIDI possibles (2puissance4).

Pour les données, elles ne peuvent être codées que sur 7 bits puisque pour elles, le premier bit doit toujours être à 0, sinon ce serait un byte de commande. Les valeurs possibles de ces données sont donc comprises entre 0 et 127.

Cette manipulation de bits étant faite, voyons les commandes qui sont utiles à l'orgue.

Note On : 1001 xxxx + 2 bytes de données

En rouge, le code note on : la note doit se faire entendre sur le canal noté xxxx (compris entre 0 et 15 soit 16 canaux possibles)

Les deux bytes de donnée qui suivent donnent respectivement le numéro de la note jouée au clavier et la vitesse à laquelle cette note a été jouée. A noter que pour un orgue, la vitesse n'a aucune signication : le tuyau chante ou ne chante pas!

Note Off : 1000 xxxx + 2 bytes de données.

C'est le contraire de la commande précédente : xxxx est le numéro du canal, le premier byte qui siut est le numéro de la note et le dernier la vitesse avec laquelle cette note a été lâchée. Ce dernier byte n'a aucune signification pour l'orgue. Pour les programmeurs, il faut savoir cependant que si ce dernier byte est à 0 (vélocité nulle) c'est équivalent à Note Off.

Program Change : 1100 xxxx +1 byte de donnée

Nous traduirons pour l'orgue : changement de jeu ou de registre. Le byte qui suit donne le numéro du jeu concerné.

ControlChange : 1011 xxxx + 2 bytes de données.

Cette commande va concerner la pédale d'expression. Le second byte qui suit sera à 7 (commande de volume) et le dernier pourra varier de 0 (boîte fermée) à 127 (boîte ouverte).

Ce sont les seuls codes MIDI concernant fondamentalement la commande d'un orgue.

Un petit mot cependant sur une commande un peu particulière : Sys Ex (1111 0000 + 1 byte de donnée + informations exclusives. Ce message doit toujours se terminer par EOX (11110111) pour : Fin de Message Exclusif!

Que se passe-t-il? A la réception du premier byte, tous les récepteurs vont tester le byte qui suit. Si le numéro porté est celui de leur constructeur, alors ils prendront en compte le message. Si ce numéro n'est pas celui de leur constructeur, ils ignoreront tout ce qui suit jusqu'à la réception de EOX.

C'est la politique du "chacun chez soi" ou "chacun pour soi"!

Ceci peut expliquer que vous ne pouvez pas changer les sons de votre orgue avec une commande émanent d'un autre constructeur ou de votre ordinateur!

Pour ceux que la technique intéresse : une interface MIDI complète :

On reconnait en haut du schéma l'entrée avec son opto-coupleur.

 

En bas, les trois prises classiques :

MIDI IN : les codes MIDI entrent dans le processeur.

MIDI OUT : les codes générés par le processeur sortent.

MIDI THRU : les codes entrant sont envoyé dans cette prise sans traitement.

Pour ceux que la programmation intéresse :

Attention : tous les codes sont donnés en hexadécimal.

L'exadécimal est une représentation plus pratique d'utilisation que le code binaire pur. On coupe l'octet en deux parties : le MSB et le LSB. Chauqe partie comprend quatre bits;avec quatre bits, on peut compter de 0 à 15, soit seize nombres possibles (base 16).

Comme notre système est en base 10, nous n'avons que 10 symboles pour représenter le nombres : 0 à 9.

En hexadécimel, on apris pour habitude d'utiliser les premières lettres de l'alphabet pour compléter les symboles à 16.

On compte donc de la façon suivante :

Un exemple : dans le n° des notes, prenons le DO du milieu du clavier. Son numéro en décimal est : 60 (entre paranthèse), en hexadécimal c'est : 3C et en binaire

c'est : 0011 1100. Il est plus facile d'écrire 3C que la succession de 0 et de 1.

Pourquoi ne pas écrire directement en décimal? Tout simplement parce que les machines ne connaissent que deux états représentés par 0 et 1 (le courant passe ou ne passe pas). Elles ne savent compter que de 0 à 1. A cause de ces deux états possibles, on ne peut écrire les nombres en machine que par des puissances de 2 ce qui n'est pas possible facilement en décimal (base 10). Si on le faisait, on perdrait des bits. Ces états, qui seraient perdus, sont représentés par les lettres en hexadécimal.