Chargement...
 
[Voir/Cacher menus de gauche]
[Voir/Cacher menus de droite]



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

Avertissementattention
Page en cours d'écriture ardoisebleue 04-12-2014 / 27-03-2018




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.
exemple :

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.
exemple :
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.
informationinfo
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





Image
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.
informationinfo
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 = d165
le premier bit est à 0 => dernier octet pour définir le délai : d64
délai = 165*128 + 64 = d21184 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.
informationinfo
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 expression. Pour une valeur au delà de 7f, idem dessus avec le code 2B.
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)

informationinfo
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.


Collaborateur(s) de cette page : ardoisebleue et olinuxx .
Page dernièrement modifiée le Dimanche 24 mars 2019 10:12:20 par ardoisebleue.
Le contenu de cette page est licencié sous les termes licence.

Documentation [Afficher / Cacher]

Connexion
[Afficher / Cacher]



Mégaphone [Afficher / Cacher]

sub26nico, 14:57, lun. 19 Aug 2019: Un thérémine numérique open-source : [Lien]
sub26nico, 20:14, sam. 17 Aug 2019: Salut et bienvenue à Samuel BARBIER :-)
sub26nico, 13:26, mer. 14 Aug 2019: Salut et bienvenue à Byond :-)
olinuxx, 14:48, mar. 13 Aug 2019: Bonjour et bienvenue à echevresm cool
olinuxx, 18:02, lun. 12 Aug 2019: Bonjour et bienvenue à barnabulle1700 cool
olinuxx, 15:15, dim. 11 Aug 2019: Bonjour et bienvenue à aldudes cool
sub26nico, 20:13, sam. 10 Aug 2019: Salut et bienvenue à pannanico1 :-)
dawamss, 13:09, ven. 09 Aug 2019: salut à toi olinuxx
olinuxx, 12:45, ven. 09 Aug 2019: Bonjour et bienvenue à dawamss cool
sub26nico, 15:11, mar. 06 Aug 2019: Salut et bienvenue à kiwi007 :-)
olinuxx, 14:07, mar. 06 Aug 2019: Bonjour et bienvenue à zigmhount cool
allany, 19:30, lun. 05 Aug 2019: Du tonnerre, l'édito d'août !!! [Lien]