[ Le homestudio ]
Accueil  Plan du site  À propos  Contact 
:. techniques homestudio et musiques électroniques Par Alex D.
Accueil > La norme MIDI

:. Dossiers
» La synthèse
 

Guide des synthétiseurs - analogique, FM, modélisation physique, etc.

» Le mixage
 

Les techniques de mixage, l'égalisation, la compression dynamique

» Le Midi
 
La norme MIDI

» Spécifications électriques
» Protocole
» Messages généraux
» Modes MIDI
» Messages systèmes
» Messages temp-réel

» Lexique
  Pour décrypter le jargon des spécialistes
:. Humeurs 
» Préjugés sur les musiques électroniques
  Les préjugés ont la vie dure !
» Guide des musiques électroniques
  Sélection de disques, guides des artistes.

En bref

C'est le langage qu'utilisent les synthétiseurs pour dialoguer entre eux. C'est également le MIDI qui permet à un ordinateur de piloter un synthétiseur.

 
» La norme MIDI

La norme MIDI était à l'origine destinée à relier les synthétiseurs entre eux. Typiquement, un clavier maître servait à piloter plusieurs générateurs sonores. C'est plus tard que l'on a eu l'idée d'y connecter aussi les ordinateurs. Ceci explique l'orientation "temp réel" du format des données, peu adapté à l'enregistrement.

La norme MIDI 1.0 a été publiée par par l'IMA (International MIDI Association) en 1983. Il y a eu des évolutions depuis lors, mais l'essentiel reste identique. Les évolutions sont réalisée par le consortium MIDI Manufacturer Association.

 Spécifications électriques

Le connecteur MIDI est un connecteur DIN à 5 broches standard. Quelques rares fabriquants proposent plutôt des connecteurs XLR pour leur plus grande robustesse, mais ils sont peu répandus car onéreux et ne respectant pas la norme. On utilise une prise distincte pour l'entrée et pour la sortie, pour autoriser toutes sortes de câblages. Il n'y a pas de détrompeur : il est possible de relier par mégarde deux sorties ; il n'y a normalement pas de dégats car les sorties sont assez robustes -- à éviter quand même ! On appelle "MIDI in" l'entrée vers l'instrument, "MIDI out" la sortie. Certains instruments sont équipés d'une prise "MIDI thru". Elle renvoit sans modification ce qui arrive par la prise "MIDI in", permettant ainsi le chainage. Le câble utilisé est de type paire torsadée entre les broches 4 et 5. La broche 2 est reliée à la masse. les broches 1 et 3 ne sont pas utilisées.

Les données circulent à une vitesse de 31.25 Kbaud (+/-1%), 8 bits de données, 1 bit de départ, 1 bit d'arrêt, soit 320 microsecondes par octet. Pour obtenir une bonne isolation électrique, l'interface MIDI repose sur une boucle de courant ; la commande se fait en intensité et pas en tension. La boucle de courant est fixée à 5 mA, le 0 logique étant la présence de courant. Du côté récepteur, il est nécessaire d'utiliser un opto-coupleur qui bascule en moins de 2 microsecondes (Sharp PC-900 ou HP6N138 par exemple).

Grâce à l'utilisation d'une boucle de courant et d'un opto-coupleur, il y a une isolation électrique totale entre l'émetteur et le récepteur. On ne connecte la masse (broche 2 et blindage) que du côté de l'émetteur et jamais du côté du récepteur. N'oublions pas, en effet, qu'il est conseillé de ne jamais relier ensemble les masses de deux appareils audios autrement que par le câble audio lui-même. Une interface MIDI ne doit pas connecter la masse sur une prise "MIDI in" ; cependant, il est tellement fréquent de trouver des interfaces qui ne respectent pas la norme (surtout les adaptateurs joystick vers les ordinateurs) que certains câbles réalisent eux-même cette connexion d'un seul côté. Attention, dans ce cas le câble MIDI a un sens !

 Protocole MIDI

Les données sont transmises sous formes d'octets. On distingue deux types d'octets : les octets "opcode" que l'on appelle aussi "status" ont le bit 7 fixé à un, et les octets de données avec le bit 7 mis à zéro. Les octets status sont suivis des données correspondantes. Il y a une notion "d'état courant" : si on envoie des données sans répeter l'octet status, on considère simplement que le même octet status est sous-entendu.

Le protocole prévoit un échange d'informations sur 16 canaux différents, un canal étant souvent associé à la notion de piste. Les paramètres tels que volume, modulation, panoramique, changement de programme, etc. s'appliquent séparément à chaque canal. Un instrument reçoit selon le mode MIDI un seul ou plusieurs canaux.

 Messages généraux

Dans ce document, les valeurs hexadécimales sont préfixées par 0x (comme en C), les bits numérotés de 0 à 7, 0 étant le bit de poids faible. Les octets status ont un format fixe.

  • bit 7 : fixé à un (identifiant "status")
  • bits 6-4 : code du message sur 3 bits (8 valeurs)
    • 0 : fin de note
    • 1 : début de note
    • 2 : pression dynamique (par note)
    • 3 : paramètre
    • 4 : sélection de programme
    • 5 : pression dynamique (par canal)
    • 6 : pitch bend
    • 7 : message système
  • bits 3-0 : numéro du canal

Passons en revue la signification des différents codes, ainsi que les octets de données associés. Si on considère l'octet complet en écriture hexadécimale, les codes sont en fait des intervalles puisqu'il existe un code pour chaque canal. Puisque le bit 7 est toujours fixé à 1, les codes démarrent à 0x80.
Par exemple, le code 0x89 correspond à : fin de note sur le canal 9.

0x80 à 0x8F : fin de note (note off)
0x80 note vélocité
  • un octet de numéro de note
  • un octet de vélocité

La vélocité de relâchement a très rarement une signification.

0x90 à 0x9F : début de note (note on)
0x90 note vélocité
  • un octet de numéro de note
  • un octet de vélocité

C'est sans doute le message le plus courant. Il faut noter que si la vélocité vaut 0, ce message est équivalent à la fin d'une note. Grâce à ce mécanisme de subsitution des "note on" avec vélocité 0 par "note off", une succession de notes est traduite à l'aide uniquement d'évènements "note on" ; on peut donc omettre l'octet de status. C'est une pratique largement répandue, utilisée en standard par de nombreux synthétiseurs.

La vélocité est censée utiliser une échelle logarithmique, les claviers ne la gérant pas envoient normalement 64. On constate cependant que les échelles de vélocité varient beaucoup d'un clavier à l'autre, et que les claviers qui ne sont pas sensibles à la dynamique ont tendance à plutôt envoyer 100 au lieu de la valeur 64 préconisée par la norme.

Le "do" médian (celui au milieu du clavier) a pour numéro 60. Le "la" de référence à 440 Hz a donc pour numéro 69.

0xA0 à 0xAF : pression dynamique (after touch)
0xA0 note pression
  • un octet de numéro de note
  • un octet de valeur de pression

Ces valeurs correspondent à la pression exercée sur le clavier pendant que la touche est enfoncée.

0xB0 à 0xBF : contrôleurs
0xB0 contrôleur valeur
  • un octet de numéro de contrôleur
  • un octet de valeur

Les contrôleurs sont par exemple le volume, la réverbération, le panoramique... Leur numéro n'est pas fixé par la norme MIDI mais la plupart des constructeurs respectent les valeurs données par la norme General Midi.

0-31
contrôleurs de 0 à 31, octet de poids fort
32-63
contrôleurs de 0 à 31, octet de poids faible
64-95
contrôleurs de type bascule (0 et 127 seules valeurs autorisées)
96-121
non spécifié
122-127
réservé, voir "messages de mode".

La norme impose uniquement le numéro 1 pour la molette de modulation. On constate cependant que l'usage du numéro 7 pour le volume, 11 pour la pédale d'expression, 13 pour le réglage de panoramique, 64 pour la pédale de sustain, 91 pour la réverbération et 93 pour le chorus est très largement répandu, même pour les instruments qui ne répondent pas à la norme General Midi.

Les contôleurs de 32 à 63 servent théoriquement pour fixer les paramètres de façon fine, de façon à avoir deux octets significatifs. On constate que très peu d'instruments utilisent des paramètres sur 2 octets, et les valeurs sont en général dans l'intervalle 0-127. On remarque également qu'en pratique, les contrôleurs de la zone 64-95 sont utilisés sur la plage complète 0-127 et ne sont pas forcément utilisés en bascule.

Les contrôleurs 122-127 sont utilisés pour la gestion des modes MIDI.

0xC0 à 0xCF : sélection de programme
0xC0 programme
  • un octet de valeur

La sélection de programme permet de changer de timbre. La norme MIDI 1.0 n'impose pas de liste d'instruments standard. C'est l'une des principales raisons de l'établissement de la norme General Midi.

0xD0 à 0xDF : pression par canal (channel aftertouch)
0xD0 pression
  • un octet de valeur

Identique à la pression dynamique mais gérée globalement sur un canal complet.

0xE0 à 0xEF : pitch bend
0xE0 poids faible poids fort

Données sur 14 bits :

  • 7 bits de poids faible
  • 7 bits de poids fort

Les valeurs vont donc de 0x00 à 0x3FFF, avec le point neutre en 0x2000. L'amplitude n'est pas spécifiée dans la norme, mais on constate qu'en général, elle est de 2 demis tons vers le haut et vers le bas.


 Les modes MIDI

Les messages de modes contrôlent la façon dont l'instrument reçoit les données. Le but de ces messages est de filtrer les notes selon les canaux pour permettre de réaliser une chaîne MIDI, chaque instrument ne prenant que ce qui le concerne.

 

Octet Status Numéro du contrôleur Valeur du contrôleur
Contrôle local 0xBO 122 0=off, 127=on off : les notes du claviers ne sont pas envoyées au générateur de son ; on : le clavier commande le générateur de son.
Toutes notes off 0xBO 123 0 Le générateur de son arrête toutes les notes en cours.
omni off 0xBO 124 0 Réception uniquement sur le canal Midi "de base".
omni on 0xBO 125 0 Réception sur tous les canaux Midi en simultané.
mode mono 0xBO 126 nombre de canaux Instrument monophonique (une voix à la fois)
mode poly 0xBO 127 0 Instrument polyphonique (plusieurs voix simultanées).

Ces modes ne sont pas importants en pratique, car vraiment très peu utilisés. L'intention de départ pour contrôler la chaine Midi était louable, mais l'implémentation n'a pas suivi.

 

Les combinaisons des messages "omni" et "mono/poly" définissent les modes MIDI. Les messages de modes ne sont donnés qu'à titre indicatif, un synthétiseur peut les ignorer. La façon de préciser les numéros de canaux utilisés n'est pas claire. Chaque fabriquant a donc préféré définir un choix des canaux reçus par un réglage directement sur l'appareil. Par défaut, les instruments sont généralement en mode 1 : omni on, poly.

Le réglage du contrôle local est très largement utilisé, mais là encore, il correspond souvent à un bouton en façade de l'appareil et non au message Midi. Il sert pour éviter les notes doublées dans le cadre de l'utilisation avec un séquenceur : souvent le séquenceur renvoit les notes qu'il reçoit (echo) et devient une sorte de "patchbay" Midi. Du point de vue du séquenceur, il y a un clavier de commande et un générateur de sons ; il faut donc retirer la connexion directe de l'un à l'autre pour laisser le séquenceur router correctement les messages Midi.


 Les messages systèmes

Les octets de status de 0xF0 à 0xF7 ne correspondent à aucun canal. Ils sont réservés pour échanger des messages de type "système".

Octet Status Octets de données
System exclusive 0xF0 Identifiant du constructeur Données de longeur variable Message défini par le constructeur, entièrement libre. Il est composé d'octets de données (donc dans 0-127, bit 7 à 0) et terminé par l'octet 0xF7
0xF1 Non défini
Position 0xF2 octet de poids faible octet de poids fort Pointeur de position dans la chanson, donné en nombre de temps.
Sélection de chanson 0xF3 numéro de chanson Message destiné aux séquenceurs capables de stocker plusieurs chansons.
0xF4 Non défini
0xF5 Non défini
Accordage 0xF6 Cette commande demande à un synthétiseur analogique de s'accorder automatiquement s'il dispose d'un accordeur automatique.
EOX 0xF7 Fin de "system exclusive". Cet octet de fin est optionnel.

On remarquera les regroupements en fonction de la zone géographique USA/Europe/Japon. Sequential Circuits, principal instigateur de la norme Midi, a logiquement le numéro 1.

 

Les messages "system exclusive" sont entièrement définis par le fabriquant de l'instrument. Ils sont normalement terminés par l'octet de status 0xF7 mais celui-ci est optionel. Il existe des synthés qui oublient effectivement cet octet pour signaler la fin. Pour connaître la structure interne de ces messages, on se reportera à la notice de chaque synthétiseur. L'octet d'identification est attribué à chaque constructeur par le commité du standard Midi.

0x01 Sequential Circuits
0x02 Big Briar
0x03 Octave/Plateau
0x04 Moog
0x05 Passport Design
0x06 Lexicon
0x11 PAIA
0x12 Simmons
0x13 Gentle Electric
0x14 Fairlight
0x18 E-Mu
0x20 Bon Tempi
0x21 S.I.E.L.
0x23 SyntheAxe
0x40 Kawai
0x41 Roland
0x42 Korg
0x43 Yamaha
0x44 Casio
0x47 Akai
 Les messages temps-réel (realtime)

En pratique, ils ont insérés entre les autres messages, comme des messages normaux.

 

Les octets de 0xF8 à 0xFF sont réservés pour des messages d'indication de jeu temps-réel. Ils peuvent théoriquement intervenir n'importe quand , c'est-à-dire même au milieu des données, et n'affectent pas l'état courant du status. Oublier leur particularité peut causer des erreurs inattendues dans certains cas.

Horloge 0xF8 Envoyé 24 fois par tenps
0xF9 Non défini
Start 0xFA Démarrage du séquenceur, depuis le départ ou depuis la position précisée à l'aide du message système "Position".
Continue 0xFB Démarrage du séquenceur au point courant
Stop 0xFC Arrêt du séquenceur. Reprise possible par "continue"
0xFD Non défini
Test de présence (active sensing) 0xFE Message de contrôle de l'état de la tranmission, normalement envoyé au moins toutes les 300 milisecondes. Facultatif, donc inutile puisqu'on ne sait pas s'il faut s'attendre à la recevoir ou pas...
Réinitialisation 0xFF Réinitialisation de l'instrument tel qu'à sa mise sous tension. A utiliser avec modération, quand tout va mal. On évitera tout usage systématique.
   

Les messages d'horloge sont émis à la fréquence de 24 message par noire et sont utilisés pour la synchronisation de plusieurs machines, en particulier les arpégiateurs, les boites à rythmes ou les systèmes d'accompagnement automatique. C'est la seule façon qui existe pour indiquer le tempo. A cause de cette méthode, la variation brutales de tempo ne sont pas précise.

Start/stop/continue servent avec les séquenceurs. On utilise 'continue' pour reprendre à l'endroit où l'on s'était arrêté avec 'stop'.

© 2002 Alexandre Denis - Tous droits réservés. Dernière mise à jour : 15.11.2002 [compteur]