1) Rappel sur le format des
données
informatiques
Le format Hexadécimal :
| Valeure
binaire |
valeure
hexadécimale |
Valeur décimale LSN |
Valeure
décimale MSN |
Valeure binaire | valeure hexadécimale | Valeure décimale LSN |
Valeure décimale MSN |
||
| 0000 |
0 |
0 |
0
à 15 |
1000 |
8 |
8 |
128 |
||
| 0001 |
1 |
1 |
16
à 31 |
1001 |
9 |
9 |
144 |
||
| 0010 |
2 |
2 |
32
à... |
1010 |
A |
10 |
160 |
||
| 0011 |
3 |
3 |
48
à ... |
1011 |
B |
11 |
176 |
||
| 0100 |
4 |
4 |
64 |
1100 |
C |
12 |
192 |
||
| 0101 |
5 |
5 |
80 |
1101 |
D |
13 |
208 |
||
| 0110 |
6 |
6 |
96 |
1110 |
E |
14 |
224 à 239 |
||
| 0111 |
7 |
7 |
112 |
1111 |
F |
15 |
240 à 255 |
Le bit de tête :
| Valeure
binaire |
valeure
hexadécimale |
Valeur décimale |
| 0000 0001 (le nombre est codifié sur 7 bits) |
01 |
1 |
| 0111 1111 |
7F |
127 |
| 1000 0001
- 0000
0000 équivalent de ..00 0000 1000 0000 (le nombre n'est codifié que sur 14 bits) |
80
00 équivalent de 80 |
128 |
| 1000 0000
- 0000
0001 équivalent de ..00 0000 1000 0001 |
équivalent
de 81 |
129 |
| 1111 1111
- 0111
1111 équivalent de ..11 1111 1111 1111 |
équivalent
de 3F FF |
faites le calcul |
| 1000 0001 - 0000 0000- 0000 0000 équivalent de ...0 0000 0100 0000 0000 0000 (le nombre est codifié sur 21 bits) |
équivalent
de 40 00 |
faites le calcul |
Un fichier Midi comporte
deux grands types de
données, regroupés en blocs (en anglais: Chunk) : le bloc
d'entête et
le ou les blocs pour
décrire les pistes (= chaque portée).
Chaque bloc est lui même formé de trois parties:
Un premier mot de 4 octets qui indique le type de bloc (MThd = bloc
d'en-tête, en anglais header; MTrk = bloc de piste ;
en anglais : track)
Un mot de 4 octets qui indique la longueur du bloc, c'est à dire
le nombre d'octets de données
qu'il contient .
Suivent
les octets de
données.
Voici un exmple: un bloc
d'entête suivi d'un
seul bloc de piste.
section MIDI <-------------Bloc d'en-tête------------> <---Entête de piste---> <---données--> <Fin de piste> |
a) Le Bloc
d'en-tête (MThd) :
Pour un fichier Midi, le bloc
d'entête apparait toujours sous
la forme suivante:
4D 54 68 64 00 00 00 06 ff ff nn nn dd dd
Il comporte trois parties :
* une première
séquence de 4 octets qui signifie qu'on a affaire à un
fichier midi (4D 54 68 64, qui correspond à la codification
hexadécilale des lettres MThd)
* une seconde séquence de 4 octets qui indique la
longueur de la séquence de données, enfin on trouve
la séquence de données, qui pour le bloc d'entete
d'un fichoier midi sera toujours égale à 6 octets.
* enfin, un groupe de 6 octets de données explicités ci
aprés.
| A : 4 octets |
Identification |
4D 54 68 64 | Fichier Midi (= code Ascii des
lettres
MThd) |
| B : 4 octets |
Longueur |
00 00 00 06 | Les
données de l'entête font 6 octets |
| C;D;E : variables |
Données |
ff ff nn nn dd dd | voir ci-aprés |
Trois types de données se trouvent dans l'entête:
| C : 2 Octets |
Format |
00 00 ou 00 01 ou 00 02 |
Il y a pour l'instant 3 formats Midi
posisbles: format Midi 0 : 1 seule piste (16 canaux possibles) format Midi 1 : plusieurs pistes simultanées format Midi 2 : plusieurs pistes indépendantes (peu usité) |
| D : 2 Octets |
Nombre de
pistes différentes dans le fichier Midi ("ntrks") |
nn nn | Bien sûr, pour le format Midi 0, cette valeur est toujours égale à 00 01. |
| E : 2 Octets |
Résolution temporelle (division) | dd dd | Pour faire simple, on dira que cette
donnée fixe l'emplacement des barres de mesures : elle donne
en nombre de pulsions
élémentaires - appelées tick d'horloge- la
durée d'une noire (en anglais "quart de note"), donc du "temps
musical". On n'en dira pas plus ici, car cela devient vite abstrait et compliqué... Bon, simplement pour détailler un peu: Il y a deux octets donc 16 bits. Si le premier bit est à zéro, c'est ce qu'on a dit. S'il est à un, c'est plus compliqué. |
b) Bloc de piste MTrk :
L'entéte est suivie par un certain
nombre de blocs de piste
qui dépend
du format de fichier (Midi 0, Mdi 1 ou Midi 2) et, bien sûr, du
nombre de pistes.(Le format Midi 0 n'en
comporte évidemment qu'un
seul.)
Il comporte trois parties :
* une première
séquence de 4 octets qui signifie qu'on a affaire à un
bloc de piste (4D 54 68 64, qui correspond à la codification
hexadécilale des lettres MThd)
* une seconde séquence de 4 octets qui indique la
longueur totale du bloc
* enfin les données.
Il est terminé par une
indication de fin de bloc.(FF 2F 00) qui est redondante avec la
longueur du bloc donnée précédemment
| 4 octets |
Identification |
4D 54 72 6B |
début de bloc (= code
des lettres MTrk) |
| 4 octets |
Longueur |
00 00 00 22 | Longueur variable : ici 22
en hexadécimal = 2*16+2= 34 octets |
| variables |
Données |
|
voir ci-aprés |
| Fin de bloc |
tt FF 2F 00 | Il s'agit
d'une valeur de données particulière qui confirme la fin
des données (également indiquée par la longeur des
données) |
Le Running status
Le
mode
«running status» permet de gagner quelques octets, donc
de la mémoire et du temps de traitement. Pour deux ou plusieurs
évènements successifs, si l'octet de commande est le même, (par
exemple plsuieurs débuts de notes), on ne répète pas l'octet de
commande et on passe directement à loctet de donnée. Voir l'exemple
plus bas
0ctet <--- octet de statut ---> <----- Données 1 -----> <----- Données 2 -----> |
|
Message |
octet de statut |
Données 1 |
Données 2 |
Description |
| Messages
de canal |
||||
|
Note off |
8 x |
nn |
vv |
Fin d’une note avec dynamique pour sa disparition |
|
Note on |
9 x |
nn |
vv |
Début d’une note avec force d’appui ou vitesse d’enclenchement |
|
Polyphonic after touch |
A x |
nn |
vv |
donne
pour la suite la vélocité vv du son de hauteur nn sur le
canal x: ce n'est pas une nouvelle note mais une manière de
jouer différente la note en cours |
|
Control change |
B x |
cc |
vv |
L'évènement envoie au controleur cc la valeur vv pour action. Chaque instrument (chaque fabricant
d'instrument) possède ses
propres controleurs (par exemple : pédale, sourdine...) |
|
Program change |
C x |
pp |
non utilisé |
Changement d’instrument pour le canal
demandé |
|
Canal After touch |
D x |
vv
valeur
|
non
utilisé |
donne pour la suite la vélocité vv à toutes les notes du canal x |
|
Pitch bend |
E x |
bb
|
tt |
Le picth bend est un contrôle qui change légèrement la hauteur de la (les) note jouée vers le haut ou vers le bas.. La Position centrale (note "juste") est à 00 40 |
| Messages
systèmes |
Fx |
Pour mémoire, on a dit qu'on en parlerait pas.
|
||
Exemple :
enchainement du début de Ah vous dirai-je Maman :(Fa Fa Do
Do Ré Ré Do)
Note <Début Fa > <--- Fin Fa---> <Début Fa > <--- Fin Fa---> < Début Do > ... |
| Texte | tt FF 01 ll xx tt FF 02 ll xx tt FF 03 ll xx tt FF 04 ll xx tt FF 05 ll xx |
longueur (en
nombre d'octets) - texte
Ces
évènements sont utilisés pour insérer un
commentaire. |
| Marqueur | tt FF 06 ll xx |
Met une marque à un moment précis. La signification de la marque est donnée par le texte |
| Changement de Tempo | tt FF 51 03 tt tt tt | tt tt tt durée d'une
"noire" (unité de temps) en microsecondes soit 60,000,000 / 'tt tt tt' battements par mn Le tempo dans un fichier
midi
s'exprime en nombre d'unités élémentaires de
temps (une microseconde) par "noire". |
| Time signature | tt FF 58 04 nn dd cc bb | 'nn' / 'dd'
représente la mesure comme notée sur une partition (2/4,
6/8...). Attention dd est à comprendre comme une puissance de deux (22= 4 ; 23=8 ; exemple 2/4 se note 02 02; 6/8 se note 06 03) Par défaut, c'est la valeur 4/4 qui est retenue (04 02) 'cc' nombre de "Midi clock" dans un clic de métronome. Un "Midi clock" est égal à 1/24 de "noire (unité de temps)" 'bb' : pour la notation écrite, valeur de la triple croche enen 1/32 durée d'une noire, 24 le plus souvent paramètre bb exprime le nombre de note dans 24 MIDI clocks Nota: Par défaut, en l'absence d'indication par un méta-évènement, la mesure est égale à 4/4. |
| Clé | tt FF 59 02 sf mi | sf :
-7
pour 7 bémols, -1 pour 1 bémol, 1 pour 1 dièse, 0
pour aucune altération etc mi : 0 mode majeur ou 1 mode mineur |


