| 
               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 ! 
              
              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.  
         
		      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) 
              
              
                -  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)
              
              
                -  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)
              
              
                -  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
              
              
                -  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
              
              
               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)
              
              
               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 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.  
                
 |