L'interface MIDI est sérielle, bidirectionnelle (envoi et réception de messages) et asynchrone. Elle n'est pas synchrone car il aurait fallu à l'émission et à la réception deux horloges parfaitement synchronisées. Or, l'émission est souvent réalisée par un humain.
Le protocole MIDI permet de coder la musique en binaire. Ces codes binaires sont regroupés en 2 catégories. Les octets de statut, qui définissent un message, et les octets de données, qui définissent les paramètres de ces messages. Les octets de statut ont leur premier bit à 1, tandis que les octets de données ont leur premier bit à 0. Le tout premier bit est aussi appelé Most Significant Bit (MSB).
Précisons que l'on dit bit (contraction de Binary Digit, donnée binaire) en français et en anglais, et que l'on traduit byte par octet (avec 1 octet = 8 bits).
Ces octets sont précédés d'un bit de départ et d'un autre d'arrêt. Ils prennent toujours la valeur zéro, ils permettent de savoir où commencent et où finissent les octets. Comme ce sont seulement les 8 bits du milieu qui nous intéressent, il n'en a pas été fait mention dans ce qui suit.
Même s'il existe de nombreux autres types de messages, nous étudieront ici seulement les plus courants, les MIDI Channel Messages.
Lors de l'échange d'information, le système reconnaît deux types de message.
Le premier est le "status byte" ou octet de statut. Celui-ci permet à l'organe récepteur d'interpréter quel type de message lui envoie l'organe émetteur. Ainsi, une action physique comme l'enfoncement d'une touche sera représenté par une étiquette binaire la caractérisant. Cette étiquette est représentée par les trois bits suivants le start bit de l'octet précédemment cité. On dispose donc de trois bits pour nommer les différents statuts, soit 2 puissance 3= 8 statuts. Les quatre autres bits représentent le canal sur lequel l'information circule. Comme avec 4 bits on ne dispose que de 16 possibilités (2 puissance4), nous avons donc 16 canaux différents.
Le second est le "data byte" qui peut venir compléter le message précédent et agit sur le même canal. Ces messages ont leur bit le plus significatif (MSB, ou premier bit) mis à zéro. Ainsi le système peut faire la distinction entre l'octet de statut et l'octet de donnée. Donc la représentation d'un octet de donnée ne se fait que sur 7 bits ce qui donne 128 possibilités différentes (2 puissance 7): de 0000000 à 1111111, soit de 0 à 127.
Prenons un exemple:
Le musicien enfonce la note sol grave (G1) sur son clavier: Il s'agit d'un message note on . Ce message requiert l'envoi de 3 octets:
octet de statut : 10010001
le 1 indique qu'il s'agit d'un status byte
le 001 indique qu'il s'agit d'un message note on
et 0001 précise le canal MIDI, ici canal 1.
1° octet de donnée : 00000111
le 0 indique qu'il s'agit d'un Data byte
le nombre binaire suivant 00000111 est le code correspondant à G1
2° octet de donnée : 00001011
le 0 indique qu'il s'agit d'un Data byte
les chiffres 00001011 correspondant à la vélocité 12.
Le synthétiseur va jouer la note lorsque le message complet est reçu (les 3 octets complets : un de statut et deux de donnée). De même le synthétiseur arrêtera de jouer la note lorsque il recevra le message note off composé lui aussi de 3 octets (envoyé par le musicien quand il relâche la touche du clavier). Le message note off peut aussi être codé avec un note on de vélocité 0. Il existe bien sûr d'autres messages MIDI que les messages note on et note off, comme on peut le voir en détaillant les messages de statut.