Introduction
Le protocole MIDI (Musical Instrument Digital Interface) est un standard technique qui permet à des instruments de musique électroniques, ordinateurs et autres équipements musicaux de communiquer entre eux. Les données MIDI sont organisées en messages et envoyées séquentiellement à travers un câble MIDI ou une connexion USB. Chaque message MIDI est composé de plusieurs octets, qui ensemble, définissent des commandes ou des informations spécifiques concernant la performance musicale, comme le démarrage d'une note, son arrêt, sa vélocité, et d'autres paramètres.
Protocole MIDI
Un message MIDI standard est composé d'un octet de statut suivi par un ou deux octets de données, selon le type de message. L'octet de statut détermine le type de message (par exemple, note on, note off, contrôle de changement) et le canal MIDI sur lequel le message doit être envoyé (il y a 16 canaux disponibles, numérotés de 0 à 15).
Octet | Description | Valeurs possibles |
---|---|---|
Octet 1 | Statut (indique le type de message et le canal MIDI) | 0x80-0xFF |
Octet 2 | Donnée 1 (généralement la note ou le contrôleur) | 0x00-0x7F (0-127) |
Octet 3 | Donnée 2 (généralement la vélocité ou la valeur) | 0x00-0x7F (0-127) |
Notons que lorsque le MIDI est transmis via USB, le message est composé de 4 octets (1 octet de préambule suivi des 3 octets du protocole MIDI).
Octet de Statut
Bits 7-4 : Le nibble de poids fort (les quatre bits les plus significatifs) identifie le type de message MIDI. Ceux-ci spécifient s'il s'agit d'un message de note on, note off, control change, etc.
- Note Off (Note éteinte) : 0x8?. Indique qu'une note doit être éteinte (arrêtée).
- Note On (Note allumée) : 0x9?. Indique qu'une note doit être jouée.
- Control Change (Changement de contrôle) : 0xB?. Indique des changements d'un fader ou d'un potentiomètre (par exemple, le volume, la balance, le panoramique, etc.).
- Program Change (Changement de programme) : 0xC?.
Bits 3-0 : Le nibble de poids faible (les quatre bits moins significatifs) spécifie le canal MIDI sur lequel le message est envoyé. Cela permet de différencier les messages destinés à différents instruments ou interfaces MIDI.
Octets de Données
- Premier octet de données (si présent) : Pour les messages comme note on et note off, ce premier octet de données représente la note elle-même, codée en nombre de 0 à 127, où chaque nombre correspond à une note spécifique (C0 à G10).
- Deuxième octet de données (si présent) : Souvent, ce deuxième octet représente la vélocité (pour une note on/off) ou la valeur de la commande (pour un message de contrôle). Pour les messages de note on, une vélocité de 0 est souvent interprétée comme un message de note off.
Exemple de Message
Prenons l'exemple d'un message de note on pour la note La3 (440 Hz) sur le canal 1 avec une vélocité de 100 :
- Octet de statut : Pour un message de note on sur le canal 1, l'octet de statut commence par 1001 pour note on, suivi par 0000 pour le canal 1 (en comptant à partir de zéro), formant ainsi
10010000
en binaire ou0x90
en hexadécimal. - Premier octet de données : La note La3 correspond au numéro 69 en MIDI, donc l'octet est
01000101
en binaire ou0x45
en hexadécimal. - Deuxième octet de données : Une vélocité de 100 peut être représentée par
01100100
en binaire ou0x64
en hexadécimal.
Ainsi, le message MIDI complet pour jouer la note La3 sur le canal 1 avec une vélocité de 100 serait 0x90 0x45 0x64
.
Table de correspondance MIDI
Principe
La relation entre les notes de musique, les valeurs de note MIDI, et les fréquences en Hz est souvent spécifiée dans un tableau de correspondance. Ce tableau utilise la formule suivante pour convertir un numéro de note MIDI en une fréquence:
où:
est un entier allant de 0 à 127 spécifiant le pitch (la note), correspond à la fréquence en Hz.
Cette formule est basée sur le fait que le numéro de note MIDI 69 correspond à la note La (A) au-dessus du diapason central (A4), qui est calibré à 440 Hz.
Exemple
Note | Octave | Note MIDI | Fréquence (Hz) |
---|---|---|---|
C | 4 | 60 | 261.63 |
C# | 4 | 61 | 277.18 |
D | 4 | 62 | 293.66 |
D# | 4 | 63 | 311.13 |
E | 4 | 64 | 329.63 |
F | 4 | 65 | 349.23 |
F# | 4 | 66 | 369.99 |
G | 4 | 67 | 392.00 |
G# | 4 | 68 | 415.30 |
A | 4 | 69 | 440.00 |
A# | 4 | 70 | 466.16 |
B | 4 | 71 | 493.88 |
References
- Universal Serial Bus Device Class Definition for MIDI Devices: https://usb.org/sites/default/files/midi10.pdf