Cette page concerne la partie descriptive du fichier MIDI et des codes contrôles de ce standard.
Pour la présentation du protocole MIDI voir ici
attention
Page en cours d'écriture ardoisebleue 04-12-2014 / 27-03-2018
Table des matières
- Préambule :
- Le format du fichier "mid"
- Le premier bloc
- Le bloc data
- annexes
- Liens et commentaires
Préambule :
Cet article est rédigé à partir de tests et du déchiffrage partiel d'un fichier au standard MIDI. Il existe quelques pages web sur ce protocole, mais elles ne sont pas accessibles pour corriger, modifier ou ajouter des informations ; C'est pour cette raison que j'ai entamé cette documentation afin que vous y ayez tous accès et puissiez l'améliorer et la faire évoluer.
Les généralités de cette norme sont décrites ici
Pour mes tests j'ai utilisé le langage de programmation C++(QT5) et me suis basé sur deux fichiers .MID , l'un exporté depuis le séquenceur Rosegarden, et l'autre étant un ancien export de Cakewalk. J'ai aussi testé l'exportation en .mid avec Muse et Qtractor.
Dans le texte qui suit :
- Toutes les valeurs des codes sont exprimées en hexadécimal sauf indication contraire.
- SMF = Standard MIDI File
- Les types de données sont décrits en annexe A.
Le format du fichier "mid"
Ce type de fichier est organisé en format RIFF (fichier bloc) voir ici pour des informations plus détaillées sur le principe des fichiers RIFF.
Le format de codage des données du fichier est variable suivant le message envoyé au matériel ou interprété par le séquenceur. Certains de ces messages ne sont destinés qu'au séquenceur, et font partie des métadonnées. Ces formats d'envoi de code sont constitués d'une suite d'octet, dont le ou les premiers, représente le délai par rapport à l'action précédente (pour certain code il est nul, donc un octet = 00 ), ensuite le codage détermine l'action à mener, le type de data à traiter et la ou les données à traiter.
à propos du délai
le délai n'est pas donné en valeur temps (sec ou mn), mais en nombre de division de la noire (voir ..... )
Définition du nombre de données à transmettre :
- le nombre de données est défini et est obligatoire :
80 40 7F | stopper la note MI(3) de vélocité d127 |
- Un seul paramètre dont la valeur peut dépasser 7F (d127)
05 20 | la valeur du paramètre est inférieure à d127 |
05 01 25 20 | la valeur 01 est l'octet de poids fort, et la valeur 20, qui suit le code 25 de dépassement de valeur, est l'octet de poids faible. |
- La longueur en octet du paramètre doit être est indiquée
FF 07 03 41 42 43 | dans ce cas : FF 07 est le code pour un texte, 03 la longueur de cette chaine, et les 3 octets qui suivent forment la chaine. |
- La valeur et les data sont variables
F0 0A xx xx ...... F7 | Ici le codage après F0 et avant xx peut contenir 1 ou 3 octets, la suite est une série de données qui se termine par le code F7. |
Il faut savoir que les données de type "texte" n'utilisent pas la terminaison 00 ; il faut utiliser la valeur donnée par l'octet de dimension de chaine. Ce qui implique qu'une chaine ne peut excéder 255 caractères.
Le premier bloc
struct entete{ DWORD typestructure; DWORD tailledata;// nombre d'octets des données suivantes (ici 6) WORD typesmf WORD nbzonedata WORD diviseur }
Avec ce bloc de 14 octets nous récupérons :
- le type de structure : toujours MThd (fichier MIDI)
- type de standard SMF : SMF (Standard Midi File) valeur de 0 à 2.
- 0 : une seule zone data où se mélangent les événements de plusieurs canaux.
- 1 : plusieurs zones qui se suivent dans le fichier, mais sont jouées simultanément. Les métadonnées se trouvent dans la première zone. (Type le plus utilisé).
- 2 : plusieurs zones, jouées l'une après l'autre.
- Nombre de zones data : nombre de zones de données "MTrk" (MIDI track) de 1 à 65.535 octets
- diviseur pour 1 temps (valeur de la note noire) : codage pour 1 temps
- le premier bit du premier octet = 0 : le restant des bits définissent la valeur : 120, 240, 480, 960. ex : 01 e0 nous donne d480 tics pour la noire : 01*FF + E0.
- les trois premiers bits du premier octet = 64 (d100), ils indiquent une unité suivant la norme SMPTE.
4d 54 68 64 | MThd |
00 00 00 06 | 3 fois 2 octets suivent |
00 01 | type de SMF |
00 02 | deux zones de données |
01 e0 | 480 |
Le bloc data
Ce bloc peut contenir une ou plusieurs zones MTrk, suivant la valeur de "type de standard SMF" donné en entête (dans l'exemple utilisé, il y a deux zones). Ces zones contiennent les événements musicaux, contrôles et métadonnées. La dimension du blocdata étant donné sur 4 octets elle ne peut excéder d65535, sa structure est :
struct zonedata{ DWORD balise; DWORD taille du blocdata; // ... data BYTE; BYTE; BYTE; 3 BYTE pour balise de fin de zone : obligatoire }
exemple :
4d 54 72 6b | MTrk |
00 00 00 72 | taille 114 octets : taille = taille du bloc - 3 octets ( code de fin ) |
....... | data |
FF 2F 00 | code de fin du bloc MTrk |
Chaque zone de données Mtrk se termine impérativement par ces trois octets : FF 2F 00 ; Même si la zone est unique.
La plupart du temps, l'exportation vers un fichier MID, crée une zone MTrk par piste définie dans le séquenceur.
Organisation du codage
Le premier bloc data, quelle que soit la valeur du paramètre SMF, contient les métadonnées destinées au séquenceur et ne sont pas envoyées à l'appareil. Certaines d'entre elles servent d'informations et n'ont aucune utilité pour le jeu de la musique ; Ces métadonnées commencent obligatoirement par deux codes de valeur 00 FF, suivie d'un octet pour indiquer la fonction de la donnée (ex : 02 -> texte de copyright).
ex : 00 FF 02 03 41 42 43 donnée = "ABC" (dans la suite d'octet de ce code "chaine" l'octet <03> définit la taille de la chaine)
4d 54 72 6b | MTrk |
00 00 00 72 | 114 octets |
00 ff | ce qui suit est un message |
02 | texte de copyright |
1d | sa taille est de 29 caractères |
43 6f ....6f 6e | Copyright (c).... |
Ensuite il peut y avoir une suite de code "00ff" de type "07" définissant divers textes tel que le logiciel qui a créé le fichier. A leur suite vont apparaître d'autres métadonnées qui sont nécessaires aux appareils et/ou aux séquenceur tels le tempo ou l'indication de mesure, et celles-ci ont une position dans le temps pour être exécutées, dans ce cas le codage change, au lieu du "00 ff" on trouvera "8x xx ff" où "8x xx" définit le délai pour exécuter la fonction du code depuis le codage précédent.
Si un texte de chant est prévu, il est situé dans la deuxième zone MTrk et utilise le code ff05.
Codage du tempo
Pour coder le tempo le calcul s'effectue en microsecondes (µs). Par exemple un tempo de d80 battements/minute donne : 60/80 = 0.75 c'est à dire d750.000 µs par battement qui vont être codés comme suit :
xx xx ff 51 03 0b 71 b0 | |
xx xx | délai pour changer le tempo ( le premier code tempo est toujours en 00ff ) |
ff 51 | code du tempo |
03 | nombre d'octets de définition |
0b 71 b0 | d750.000 => h 0b 71 b0 Le bit de poids fort en premier et celui de poids faible en dernier. |
S'il y a une suite de tempo différents, ils sont écrits à la suite l'un de l'autre dans ce même premier Mtrk.
00 ff 51 03 0b 71 b0 | premier tempo à 80 |
87 40 ff 51 03 07 a1 20 | changement de tempo qui monte à 120 à la mesure suivante |
87 40 ff 51 03 16 e3 60 | il redescend à 40 à la mesure suivante |
8f 00 ff 51 03 07 a1 20 | et revient à 120 après deux mesures |
La création d’accélération ou ralentissement se fera par une succession d'envoi de code. Suivant le séquenceur utilisé l'exportation de ces changement n'est pas la même. A titre d'exemple Rosegarden crée un code 51 à chaque événement musical qui semble calculé par rapport au moment où il a lieu, tandis que CakeWalk crée une suite de code 51, pour obtenir des "pentes" qui font abstraction des événements. Mathématiquement ces deux principe se valent, mais la deuxième méthode "bourre" le fichier de code 51.
à propos d'une suite de tempo
La suite des changements de tempo n'est pas directement placée derrière le tempo de départ, mais en général, tous les changements de tempo sont groupés dans le premier bloc MTrk avec le tempo de départ.
Codage de la mesure
Ce codage est définit par 4 valeurs : numérateur - dénominateur - métronome et nb de triple croches par 24 clics. le numérateur représentant le nombre de temps et le dénominateur le rang de la division de la ronde (0=ronde, 1 blanche, 2=noire, 3=croche...).
exemple pour une mesure en 2/2
xx ff 58 04 02 02 18 08 | |
xx ff 58 | où xx est le délai. En général, il n'y a qu'une définition de mesure. |
04 | nombre d'octets de définition |
02 02 | pour 2/2 |
18 | valeur du métronome : d24 pour la noire |
08 | 8 triple-croches pour valeur du métronome |
Codage de la clé
à développer
L'indication de la clé se précise sur deux octets
- l'altération de la tonalité est indiquée par un octet signé de F9 à 7
- le mode sur un octet : 00=majeur, 01=mineur.
00 ff 59 02: code la clé de départ
xx
00 : mode majeur
Codes de paramétrage d'une piste
Dans les fichiers MIDI, une piste commence par un entête Mtrk avec les 4 octets définissant la taille de ce bloc qui se termine par les 3 octets ff 2f 00.
Au début de ce bloc nous trouverons : le nom de la piste, le numéro de canal, le N° de banque son et le n° d'instrument ( si le canal fait appel à une banque son ), puis les valeurs par défaut de certains contrôleurs nécessaires au départ ( volume, balance ..) et, ensuite, les notes jouées et les valeurs des contrôleurs modifiés en cours de jeu. Dans le cas du type SMF = 1 Les délais définis dans un bloc Mtrk ne sont valables que pour ce bloc Mtrk, puisque les blocs Mtrk sont joués simultanément ; Alors que dans le cas SMF=2 les délais d'un bloc Mtrk sont appliqués à la suite du dernier délai du bloc précédent.
info
Les numéros de canaux en codage dans le fichier MIDI vont de 0 à 15 et correspondent aux canaux numérotés de 1 à 16 dans les séquenceurs et autres logiciels
nom de la piste
Donnée texte - code : 03.
Il se situe aussitôt la taille du bloc et son délai est toujours 0. Ce code suit les directives des données textes.
numéro de la banque son
Code : 00.
En général, le numéro de la banque de son est placé aussitôt le nom de la piste. Il suit les règles des codes de contrôle, il est indiqué par le code control change (B.), car la piste est supposée travailler avec la banque par défaut au départ du jeu, il faut donc un changement de banque pour initialiser la piste correctement.
exemple : 00 b3 00 00
00 | délai : comme il est possible de modifier la banque en cours de jeu, il peut exister un délai différent de 00 |
b3 | b0 + 3 : b0 = premier quartet code "control change" (1011), deuxième quartet : 3 numéro de canal |
00 | code contrôle : sélection de la banque |
00 | 00 numéro de la banque |
S'il n'existe pas de code sélection de banque, c'est la banque par défaut de l'appareil ou du logiciel qui sera utilisée.
numéro d'instrument
Code : Cc.
Le changement de patch program change ne fait pas partie des codes contrôle, il a son propre code de changement. Si aucun patch n'est donné pour la piste, ce sera le patch par défaut (0) dans la banque initialisée ou par défaut qui sera utilisé.
Sa structure est "xx C+canal valeur" où :
xx | délai parce qu'il peut y avoir des changements de patch sur le même canal |
Cn | C est le code sur le premier quartet (1100) et n le n° de canal (0 à 15) sur le deuxième quartet |
valeur | valeur est obligatoirement inférieur à 7f |
à propos des instruments
Les séquenceurs, comme Rosegarden, qui ont la possibilité de se connecter "en interne" directement avec fluidsynth, exporte une piste qui n'a ni banque, ni instrument. En conséquence, à l'importation de ce fichier .mid sur un autre séquenceur, ce seront les valeurs par défaut des pistes de ce séquenceur qui seront utilisées
TRAVAUX EN COURS
En cours de mise à jour : ardoisebleue 28 03 2018
exemple du codage d'un début de piste Mtrk
Dans le tableau qui suit, appareil désigne la cible connectée au fichier et peut être aussi bien un matériel qu'un logiciel. De même, le n° de canal 0 du fichier correspond au canal 1 de la cible. Les délais autre que 0 sont indiqués par la lettre x.
4d 54 72 6b | Mtrk début d'une nouvelle piste |
00 00 2c 1d | Taille de cette piste |
00 ff 03 0a 31..6f 6e | nom de l'instrument |
00 b0 00 00 |
b0 débute une série de code contrôle sélection de la banque 0 pour le canal 0. Remarque, la valeur 0 est le MSB de la banque le LSB est donné plus bas. |
00 79 00 | Mettre tous les contrôles de l'appareil à leur valeur par défaut |
00 c0 0b | ici le code c0 annule le code b0 (le c0 est du même niveau que b0) et indique le N° de l'instrument pour le canal 0. |
00 b0 07 23 |
reprise d'une suite de codes contrôle fixer le volume à d35 |
00 5b 0f | niveau de l'effet 1 à d15(dans le cas du synthétiseur connecté : réverbération) |
00 20 00 | le LSB de la banque de donnée à 0 |
00 07 2e | le volume est refixer à d45 (sûrement une deuxième valeur entrée dans le séquenceur) |
00 0a 10 | le panoramique à d16 |
00 5d 00 | niveau de l'effet2 à 0 (pour le synthétiseur utilisé le chorus n'est pas implémenté) |
xx 51 07 | contrôleur général 6 à d7 (???) |
xx 90 4f 7f | départ d'une note |
xx 52 7f | départ d'une seconde note |
... | séquences d'envoi de notes |
00 80 4f 7f | fin d'un note (à noter, dans le morceau, une note continue à jouer) |
xx b0 07 2d |
début d'un suite de code contrôle volume à d45 |
xx 07 2c xx 07 2b .... xx 07 05 |
ici une suite de data volume en décroissance, ce qui définit un decrescendo appliqué sur la canal 0 et qui donne un shunt de la note qui est en cours de jeu. |
xx 80 3f 7f | le code 80 stoppe le b0 et interrompt la 3f qui jouait et a subi le descrescendo. |
xx b0 07 31 | à un certain délai le code contrôle volume est fixer à 49 |
xx 90 4c 7f | départ d'un note |
xx __ 4f 7f | départ d'une seconde note |
00 80 4c 7f ... xx 80 4c 7f |
ici une suite de notes et fin des notes |
xx ff 2f 00 | au délai xx fin de la piste |
4d 54 72 6b | Départ de la piste suivante. |
... |
Codage des notes
Le principe est d'envoyer un message noteON de démarrage de la note, puis un noteOFF d'arrêt pour cette même note. De ce fait la "durée" de la note n'est jamais indiquée dans le fichier ; C'est le code de départ ET son code de fin de la note qui définissent sa durée. La note est jouée dans un canal MIDI qui doit être paramétré avant l'envoi de la première note, c'est dans ce canal MIDI que sont définit l'instrument, le volume ... (voir ici).
Le format du codage commence par le délai constitué de 1 à 4 octets suivant sa valeur puis d'une série de 3 octets dont le premier est décomposé en deux quartet :
- le premier quartet définit l'action 1000 ou 1001 (80 pour noteOFF 90 pour noteON)
- le deuxième quartet définit le canal où la note doit être jouée ( la valeur 0 dans le code agit sur le canal 1 du logiciel).
- l'octet suivant est le numéro de la note à produire (0 à 127)
- en troisième position c'est la valeur de la vélocité (0 à 127)
exemple :
8e 44 91 3c 64 83 60 81 3c 7f |
||
8e 44 | délai 1860 | depuis le code précédent |
91 | noteON canal 2 | |
3c | do3 | Une note do3 va être jouée sur le canal 2. Dans un fichier MIDI, il est logiquement impossible que deux notes de même valeur soient en cours de jeu dans un même canal. |
64 | vélocité 100 | |
....autres codes.... | ||
83 60 | délai 480 | depuis le code précédent |
81 | noteOFF canal 2 | |
3c | do3 | Si sur le canal 2, une note do3 est en cours de jeu, elle va être stoppée |
7f | vélocité 127 | la vélocité dans les noteOFF peut avoir de l'importance (voir succession de notes |
Succession de notes
Dans le cas d'une série de notes qui se suivent sans autres interventions que des notes (pas de codes contrôles), la notation peut se passer des NoteON et NoteOFF ; Dans ce cas c'est la valeur de la vélocité qui "termine la note" et donne le départ d'une note suivante.
suite de codes | 93 58 90 2c 7f 81 34 2c 00 00 2d 7f 81 34 2d 00 00 2a 7f 78 2a 00 00 28 7f |
93 58 90 2c 7F | au délai 93 58 : noteON canal 1 jouer note 2c (sol#1) vélocité 127 |
81 34 2c 00 | au délai 81 34 stopper la note 2c (vélocité = 0) |
00 2d 71 | aussitôt jouer note 2d à la vélocité 71 |
81 34 2d 00 | au délai 81 34 stopper la note 2d (vélocité = 0) le délai identique au précédent montre deux notes de durée identique. |
00 2a 55 | aussitôt jouer note 2a à la vélocité 55 |
78 2a 80 2a 7F | au délai 78 2a NoteOFF canal 1 sur la note 2a : la suite est terminée. |
Si il n'ya que des notes dans le block Mtrk aussitôt le nom de l'instrument (pas de codes contrôles) | |
81 34 2d 00 | au délai 81 34 stopper la note 2d (vélocité = 0) |
00 2a 55 | aussitôt jouer note 2a à la vélocité 55 |
78 27 2a 00 | au délai 78 27 stopper la note 2a qui est la dernière de la série et du bloc |
00 ff 2f 00 | délai 0, puis les 3 octets de la fin du bloc |
Codage de notes avec jeu simultané ( accord )
Dans une suite de notes dans un même bloc, il y a des notes jouées en même temps, d'autres s'arrêtent et d'autres démarrent, la notation va permettre d'éluder certains NoteON ou NoteOFF. Il semble convenu, dans certaines conditions, qu'il est possible d'éviter ces répétitions de codes.
suite de codes | 0f 90 4f 7f 78 52 7f 00 80 4f 7f 77 90 5b 7f 65 44 7f 50 80 52 7f 40 5b 7f 50 44 7f |
0f 90 4f 7f | au délai 0f, démarrer la note 4f vélocité 7f sur le canal 1 |
78 52 7f | au délai 78 ( le 90 est omis ) démarrer la note 52 vélocité 7f |
00 80 4f 7f | au délai 00, donc en même temps que le démarrage de la note précédente, arrêter la note 4f vélocité 7f. Cette notation est plus compliquée que précédemment. |
77 90 5b 7f | au délai 77 démarrer la note 5b vélocité 7f (la note 52 est toujours jouée) |
65 44 7f | au délai 65 ( le 90 est omis ) démarrer la note 44 (52 et 5b sont toujours jouées) |
50 80 52 7f | au délai 50 stopper la note 52 |
40 5b 7f | au délai 40 ( le 80 est omis ) stopper la note 5b |
50 44 7f | au délai 50 ( le 80 est omis ) stopper la note 44 |
Les codes contrôle
Les contrôles agissent sur la piste où ils sont placés. Pour modifier leur valeur il faut utiliser le code Control Change B0+n°de canal .
Sa structure est "xx B+canal cc valeur" où :
xx | détermine le délai parce que les contrôles ne sont pas obligatoirement tous situés en début de piste (00) |
Bn | B est le code sur le premier quartet (1011) et n le n° de canal (0 à 15) sur le deuxième quartet |
cc | numéro du contrôleur. Les contrôles de d120 à d127 sont réservés aux Channel Mode Messages |
vv | représente la valeur du paramètre cc à changer elle doit être inférieure à 7f. Si le code ne nécessite pas de paramètre vv est nul. Si la valeur autorisée est supérieure à 7f, vv devient une valeur MSB inférieure à 7f et il faut utiliser un code de prolongation pour le LSB lui aussi inférieur à 7f. (ex : 00 01 20 05 (où 20 est le code de prolongation : 1*128+5 = banque n°133) |
à se river dans le cerveau !
Un fichier MIDI qui contient des codes de contrôle qui ne sont pas gérés par l'appareil ou le logiciel qui joue ce fichier, SERONT SANS EFFET. Un synthètiseur ne gérant pas le "portamento" ne traitera pas le code contrôle 05. Ce qui se passe généralement avec un séquenceur où le portamento est prévu dans sa liste de contrôleurs qui est connecté sur un synthétiseur qui ne possède pas cette fonctionnalité
Le pitchbend (modification de la hauteur de la note d'un ton ou deux tons en plus ou en moins) peut-être noté comme un code contrôle :
xx xx e0 7F 3F | |
xx xx | délai pour changer le pitch |
e0 | code du changement de pitch |
7F 3F | deux octets de définition |
h 7F 3F Le bit de poids fort en premier et celui de poids faible en dernier. | |
valeurs caractéristiques de octets de définition | |
7F 3F | le pitch de la note est conforme à la valeur de la base de données de la banque |
00 00 | la hauteur de note est descendue de 1 ton et 1/2 environ |
7F 7F | la hauteur de note est montée de 1 ton et 1/2 environ |
je prècise malgré tout
Ne pas confondre le pitchbend et le portamento
exemple | |
---|---|
xx e0 7F 3F | pitchbend nul la valeur de la note est inchangée |
xx 90 4f 7f | départ d'une note |
xx e0 00 00 | pitchbend descendu au maximum (env. moins 1 ton et 1/2) |
xx e0 7F 7F | pitchbend monté au maximum (env. plus 1 ton et 1/2) |
xx 80 4f 7f | fin de la note |
xx e0 7F 3F | pitchbend nul remise à la hauteur de base de la note |
... |
Succession de codes contrôles
Si une suite de changement de valeur de codes contrôle doit être inscrite, on utilise le code B.. pour le premier changement et les autres codes suivent avec un délai nul ou non-nul.
exemple : 00 b2 00 00 00 79 00 00 0a 40 00 c2 02
00 b2 | modifications des contrôleurs du canal 2 |
00 00 | utiliser la banque de son 0 |
00 79 00 | initialiser tous les contrôleurs à leur valeur par défaut |
00 0a 40 | placer le panoramique au centre (d64) |
ici la série de valeur contrôle est terminée | |
00 c2 02 | connecter le patch instrument numéro 02 sur le canal 2 |
00 92 27 64 | démarrer la note d39 vélocité d100 au début du jeu du canal 2 |
Codage des textes
Les textes du chant sont obligatoirement associés à des notes et sont définis par le code ff 05 suivant le format de codage des textes. Seules les notes sont associées à un canal, le texte étant destiné au séquenceur (en attendant une synchronisation vers une synthèse vocale ?). La série commence par le premier texte précédé du délai et suivit de sa note au délai 0, et c'est l'arrêt de cette note qui détermine la durée.
81 e5 ff 05 02 61 62 | au délai 81 05 : ff 05 02 = texte de 2 octets "ab" |
00 9f 31 64 | aussitôt démarrer la note 31 sur le canal 16 vélocité 64 |
69 31 00 | au délai 69 : stopper la note 31 |
0f ff 05 04 63 64 65 66 | au délai 0f : texte de 4 octets "cdef" |
00 9f 34 4f | aussitôt démarrer la note 34 sur le canal 16 vélocité 4f |
3c 34 00 | au délai 3c stopper la note 34 |
ainsi de suite jusque la fin... |
Nous remarquerons...
Il faut obligatoirement envoyer un code "9x" pour démarrer chaque note à cause de l'alternance de "ff 05" et "9x". Par contre, il est inutile d'envoyer un code "8x" pour terminer la note, il suffit de placer la vélocité à "00".
Il est peut-être possible, dans une même piste de placer plusieurs voix avec des textes différents, mais je n'ai testé cette situation car elle rendrait la partition monstrueusement stupide !
Le décalage ou délai pour traiter le code
La succession des traitements des actions est pilotée par un délai qui débute chaque codage. Ce délai est donné par rapport à l'action précédente (délai relatif et non pas absolu) et s'exprime en nombre de division de la noire (Valeur donnée par les deux derniers octets du bloc MThd).
Si ce délai est inférieur ou égal à 7f, il n'y aura qu'un octet pour le définir.
S'il est supérieur à 7f, il peut y a voir deux ou plusieurs octets ; Le premier bit de tous les octets sauf le dernier est à 1, le dernier octet aura obligatoirement le premier bit est à 0. Les 7 autres bits représentent le facteur de la valeur du délai.
info
Le premier bit de l'octet juste avant le code MIDI est obligatoirement à 0 (donc valeur <= 7f). Il permet ainsi d'indiquer, s'il y a plusieurs octets pour le délai, qu'il est le dernier octet représentant ce délai.
exemple :
59 | un seul octet < 7f : délai = d89 tics | |
A5 40 A5 40 |
1010 0101 0100 0000 |
le premier bit est ignorer => 100101 = d37 le premier bit est à 0 => dernier octet pour définir le délai : d64 délai = 37*128 + 64 = d4800 tics de délai avant d’exécuter le codage qui suit. |
92 d8 60 92 d8 60 |
1001 0010 1101 1000 0110 0000 |
premier bit ignorer => 10010 = d18 idem dessus => 1011000 = d88 dernier octet => d96 délai = 18*(128^2) + 88*128 + 96 = d306272 tics avant exécution. 306272/480 = 638 tics (unités de temps) |
limite du délai
La norme MIDI limite à 4 octets la définition du délai entre deux codages ce qui offre une valeur confortable.
annexes
description des types de données :
- DWORD 4 octets
- WORD 2 octets
- BYTE 1 octet
Codes des événements métadonnées :
Données texte
Tous ces codes sont précédés de xx xx FF où les xx représentent le délai avant l’exécution. Certaines métadonnées n'étant que des informations, le code avec le délai sera 00 FF.
Format : FF cc NN <texte> . cc est le code de fonction, NN indique la taille du texte toujours inférieure à 255 caractères et le terme <texte> est la suite de codes ASCII représentant le texte. Ci-dessous la valeur du code fonction :
01 | Texte quelconque |
02 | Copyright |
03 | nom de la piste |
04 | nom de l'instrument. |
05 | Sert à indiquer les paroles, ajustées à la musique. |
06 | Remarque quelconque, souvent sur la première piste Il peut y avoir plusieurs occurences de ce code |
07 | Indique un événement à un endroit précis de la partition exemple : le nom d'un fichier son à télécharger. |
08 | nom de l'instrument choisi, en association avec le choix de la banque de son. |
09 | nom unique du périphérique de sortie d'une piste, en précisant par exemple le nom du synthétiseur. À placer en tout début de zone MTrk, avant le contrôle de la banque de son ou de l'instrument, et avant tout envoi d'événement. info Un nom d'instrument doit être unique dans les fichiers avec SMF = 1 (une seule zone data) |
Liste des codes contrôle
Les Changement de contrôle
Le Registered Parameter Numbers (RPNs) est une extension de ces messages pour le réglage de paramètres supplémentaires. Les codes oubliés sont des codes non-définis.
code | valeur | description |
---|---|---|
00 | 0à7f | Sélection d'une banque de son. Si le numéro de la banque est au delà de 7f, il faut utiliser le code 20 suivi de la valeur pour indiquer le second octet du numéro de banque, qui sera l'octet de poids faible est la valeur décimale se calcul suivant la même règle que pour les délais. ex: 00 05 = banque numéro 5 00 01 20 05 = banque 128*1 + 05 = 133 |
01 | 0à7f | molette de modulation ( ou stick ). Pour une valeur au delà de 7f, idem dessus avec le code 21. |
02 | 0à7f | Breath Controller (? régulateur de bruit). Pour une valeur au delà de 7f, idem dessus avec le code 22. |
04 | 0à7f | pédalier. Pour une valeur au delà de 7f, idem dessus avec le code 24. |
05 | 0à7f | durée du Portamento. Pour une valeur au delà de 7f, idem dessus avec le code 25. |
06 | 0à7f | contrôleur de saisie (entrer une valeur). Pour une valeur au delà de 7f, idem dessus avec le code 26. |
07 | 0à7f | volume du canal. Pour une valeur au delà de 7f, idem dessus avec le code 27. En principe la valeur est comprise entre 0 et d127 |
08 | 0à7f | Balance. Pour une valeur au delà de 7f, idem dessus avec le code 28. En principe la valeur est comprise entre 0 et d127, où d67 est l'équilibre entre droite et gauche. |
0A (d10) | 0à7f | Panoramique. Pour une valeur au delà de 7f, idem dessus avec le code 2A. En principe la valeur est comprise entre 0 et d127, où d67 est l'équilibre entre droite et gauche. |
0B (d11) | 0à7f | ex |
0C (d12) | 0à7f | contrôle de l'effet 1 (généralement la réverbération). Pour une valeur au delà de 7f, idem dessus avec le code 2C. |
0D (d13) | 0à7f | contrôle de l'effet 2 (généralement le chorus). Pour une valeur au delà de 7f, idem dessus avec le code 2D. |
10 à 13 (d16 à d18) |
0à7f | Contrôleurs d'usage général numérotés 1 à 4. v suit les même règle qu'au-dessus pour le dépassement de valeur, les codes de prolongation correspondant à 10...13 sont 30...33 |
40 | 0 ou 7f | pédale amortie on/off (Sustain). Un seul octet de valeur v, de 0 à 7f. Si v≤63 off et si v≥64 on |
41 | 0 ou 7f | Portamento On/Off Si v≤63 off et si v≥64 on |
42 | 0 ou 7f | Sostenuto On/Off Si v≤63 off et si v≥64 on |
43 | 0 ou 7f | Soft Pedal On/Off Si v≤63 off et si v≥64 on |
44 | 0 ou 7f | pédale de Legato Si v≤63 normal et si v≥64 legato |
45 | 0 ou 7f | Hold On/Off(tenue de la note) Si v≤63 off et si v≥64 on |
46 | 0à7f | Sound Controller 1 (défaut: Sound Variation) |
47 | 0à7f | Sound Controller 2 (défaut: Timbre/Harmonic Intens.) |
48 | 0à7f | Sound Controller 3 (défaut: Release Time) |
49 | 0à7f | Sound Controller 4 (défaut: Attack Time) |
4A | 0à7f | Sound Controller 5 (défaut: Brightness) |
4B | 0à7f | Sound Controller 6 (défaut: Decay Time) |
4C | 0à7f | Sound Controller 7 (défaut: Vibrato Rate) |
4D | 0à7f | Sound Controller 8 (défaut: Vibrato Depth) |
4E | 0à7f | Sound Controller 9 (défaut: Vibrato Delay) |
50 à 53 (d80 à d83) |
0à7f | Contrôleurs d'usage général numérotés 5 à 8. Il n'y a qu'un seul octet de donnée pour v de 0 à 7f. |
54 | 0à7f | contrôle du portamento |
58 | 0à7f | ????valeur d'origine de la vélocité |
5B | 0à7f | niveau de l'effet 1 (niveau de la réverbération) |
5C | 0à7f | profondeur de l'effet 2 (anciennement : profondeur du trémolo) |
5D | 0à7f | niveau de l'effet 3 (niveau de chorus, anciennement profondeur du chorus) |
5E | 0à7f | profondeur de l'effet 4 (anciennement profondeur du désaccord detune |
5F | 0à7f | profondeur de l'effet 5 (anciennement profondeur du phaser) |
60 | - | incrémentation d'une donnée |
61 | - | décrémentation d'une donnée |
62 | 0à7f | numéro de paramètre non enregistré (NRPN) valeur LSB |
63 | 0à7f | numéro de paramètre non enregistré (NRPN) valeur MSB |
64 | 0à7f | numéro de paramètre enregistré (RPN) valeur LSB |
65 | 0à7f | numéro de paramètre enregistré (RPN) valeur MSB |
Les Messages de mode du canal (channel mode messages)
code | valeur | description |
---|---|---|
78 (d120) | 0 | Stopper tous les sons. Quand le messages est reçu, tous les oscillateurs sont coupés, et leur volume sont mis à zéro dès que possible. |
79 (d121) | x | Réinitialise tous les contrôleurs de la piste à leurs valeurs par défaut suivant l'appareil (où logiciel) connecté.% %La valeur x peut être nulle, sauf indication contraire de l'appareil ou du logiciel. |
7a (d122) | x | Active/Désactive le contrôle local. La désactivation du contrôle local force les appareils du canal à ignorer toutes données autres que MIDI. L'activation restaure les fonctions normales des contrôleurs.% % x=0 : désactive% %x=7F : active |
7b (d123) | 0 | stopper toutes les notes en arrêtant tous les oscillateurs. |
7c (d124) | 0 | Omni Mode Off. |
7d (d125) | 0 | Omni Mode On. |
7e (d126) | x | Mono Mode On (Polyphonic Off)% %x=nombre de canaux si "Omni Off" ou 0 si "Omni On" |
7f (d127) | 0 | Poly Mode On (Mono Off) |
info
Les quatre messages 7C à 7F provoquent automatiquement un "7b"
Liens et commentaires
Voir également le tutoriel permettant d'utiliser les codes contrôles avec ZynAddSubFX.