Implémentation MIDI
■Exemples de messages MIDI
<Exemple 1> 92 3E 5F
9n correspond au statut de Note-on et n au numéro de canal MIDI. Comme 2H = 2, 3EH =
62 et 5FH = 95, il s'agit d'un message de Note-on sur le canal MIDI 3, note n°62 (D4) de
vélocité 95.
<Exemple 2> CE 49
CnH correspond au statut de Program Change et n au numéro de canal MIDI. Comme EH = 14
et 49H = 73, il s'agit d'un message de Program Change sur le canal MIDI 15, Programme n°74.
<Exemple 3> EA 00 28
EnH correspond au statut du paramètre Pitch Bend Change et n au numéro de canal MIDI.
Le 2ème octet (00H = 0) est le LSB et le 3ème octet (28H = 40) est le MSB, mais la valeur de
Pitch Bend est un numéro à signe dont 40 00H (= 64 x 128+0 = 8192) est de 0. Ainsi la valeur
du Pitch Bend est de : 28 00H - 40 00H = 40 x 12+80 - (64 x 12+80) = 5120 - 8192 = -3072
Si vous réglez la sensibilité du Pitch Bend sur 2 demi-tons, la valeur -8192 (00 00H) va faire
varier la hauteur sur -200 centièmes. Alors, dans ce cas -200 x (-3072) (-8192) = -75 centièmes
du Pitch Bend est appliqué au canal MIDI 11.
<Exemple 4> B3 64 00 65 00 06 0C 26 00 64 7F 65 7F
BnH correspond au statut de Control Change et n au numéro de canal MIDI. Pour les
messages de Control Change, le 2ème octet correspond au numéro de contrôleur et le 3ème
octet à sa valeur. Si deux ou plusieurs messages consécutifs ont le même statut, le MIDI
dispose d'une fonction intitulée "running status" qui permet de ne pas répéter l'octet de
statut du deuxième message et des suivants. Ainsi, les messages ci-dessus ont le sens
suivant :
B3
64 00
canal MIDI 4, octet inférieur du n° de RPN :
(B3)
65 00
(canal MIDI 4) octet supérieur du n° de RPN :
(B3)
06 0C
(canal MIDI 4) octet supérieur de la valeur du RPN :
(B3)
26 00
(canal MIDI 4) octet inférieur de la valeur du RPN :
(B3)
64 7F
(canal MIDI 4) octet inférieur du n° de RPN :
(B3)
65 7F
(canal MIDI 4) octet supérieur du n° de RPN :
Autrement dit, les messages ci-dessus indiquent qu'une valeur de 0C 00H a été transmise
pour le RPN n°00 00H sur le canal MIDI 4, puis que le paramètre RPN n°7F 7FH a été
sélectionné.
Le RPN n°00 00H sélectionne le paramètre Pitch Bend Sensitivity (sensibilité du pitch bend)
et la valeur du MSB fixe le nombre de demi-tons désiré. Ainsi, une valeur de 0CH = 12 règle
le pitch bend sur sa plage d'action maximale de ±12 demi-tons (1 octave). Sur les modules
de sons GS, le LSB du paramètre de réglage de la sensibilité du Pitch Bend est ignoré, mais il
est tout de même nécessaire de le transmettre (avec la valeur 0) pour que l'opération se
déroule correctement.
Une fois que vous avez sélectionné le numéro de RPN ou NRPN désiré, tous les messages
de Data Entry transmis sur le canal correspondant sont pris en compte. Par conséquent,
pensez toujours à sélectionner le paramètre sur 7F 7FH une fois que vous avez fait les
réglages désirés pour éviter toute mauvaise surprise. C'est la raison pour laquelle on trouve
le (B3) 64 7F (B3) 65 7F à la fin.
Il est préférable de ne pas trop charger vos séquences (Stantard MIDI File, par exemple) en
événements faisant appel à la fonction Running Status (voir <Exemple 4>) parce que si la
lecture est interrompue en cours de morceau, puis ramenée vers le début ou avancée, le
séquenceur risque de ne pas pouvoir transmettre le bon statut, et le module de sons risque
de ne pas interpréter correctement les données. Essayez dans la mesure du possible de
donner à chaque événement son propre statut.
Il est par ailleurs nécessaire de transmettre les valeurs de RPN ou de NRPN dans le bon
ordre. Certains séquenceurs ne transmettent pas les événements se trouvant sur le même tic
d'horloge (ou sur des tics consécutifs) dans leur ordre de réception. Pour cette raison,
pensez à toujours à décaler légèrement les événements (d'environ 1 tic à une résolution de
96 à la noire et d'environ 5 tics à une résolution de 480 à la noire).
* TPQN : Tics à la noire.
174
■E
xemple de message exclusif et de calcul de la
Checksum
Les messages Exclusifs Roland (RQ1, DT1) sont terminés par une Checksum (avant F7) qui
garantit la bonne réception des messages. La valeur de cette Checksum est définie par
l'adresse et les données (ou la taille) du message exclusif transmis.
●Calcule de la Checksum
(les valeurs hexadécimales sont indiquées par un "H")
La checksum est une valeur obtenue par l'addition de l'adresse, de la taille et de la
checksum elle-même et en inversant les 7 bits de l'octet inférieur LSB.
Voici un exemple de calcul de la checksum. Nous partons du principe que le message
exclusif que nous transmettons comporte l'adresse aa bb cc ddH et les données ou la taille
ee ffH.
aa + bb + cc + dd + ee + ff = somme
somme ÷ 128 = quotient ... reste
128 - reste = Checksum
<Exemple 1> Réglage du paramètre Performance Common CHORUS TYPE sur DELAY
D'après le "Tableau des adresses des paramètres" (p. 162), l'adresse de début de la
Performance temporaire est 10 00 00 00H, l'adresse de décalage de CHORUS à
PERFORMANCE COMMON est 04 00H et l'adresse de CHORUS TYPE est 00 00H. Par
conséquent :
10 00 00 00H
04 00H
+)
00 00H
10 00 04 00H
DELAY porte valeur 02H.
Il faut donc transmettre le message exclusif suivant :
00H
00H
F0
41
10
0CH
(1)
(2)
(3)
00H
7FH
(1) Statut exclusif
7FH
(4) ID modèle (XV-5050)
Passons au calcul de la Checksum :
10H + 00H + 04H + 00H + 02H = 16 + 0 + 4 + 0 + 2 = 22 (sum)
22 (somme) 128 = 0 (quotient) ... 22 (reste)
Checksum = 128 - 22 (reste) = 106 = 6AH
Il faut donc transmettre le message F0 41 10 00 10 12 10 00 04 00 02 6A F7.
<Exemple2> Requète de transmission des réglages de la Partie 3 de la Performance USER:03 (RQ1)
D'après le "Tableau des adresses des paramètres" (p. 162), l'adresse de début de USER:03
est 20 02 00 00H et l'adresse de déc alage de la Partie 3 de la Performance est 00 22 00H.
Par conséquent :
20 02 00 00H
+)
00 22 00H
20 02 22 00H
Comme la taille de la Partie de la Performance est 00 00 00 31H, le message de Sysex doit être :
F0
41
10
(1)
(2)
(3)
(1) Statut exclusif
(4) ID modèle (XV-5050)
Passons au calcul de la Checksum.
20H + 02H + 22H + 00H + 00H + 00H + 00H + 31H = 32 + 2 + 34 + 0 + 0 + 0 + 0 + 49
= 117 (somme)
117 (somme) 128 = 0 (quotient) ... 117 (reste)
Checksum = 128 - 117 (reste) = 11 = 0BH
Il faudra donc transmettre le message F0 41 10 00 10 11 20 02 22 00 00 00 00 31 0B F7.
00 10
12
10 00 04 00
02
(4)
(5)
addresse
données checksum
(2) n° ID (Roland)
(3) n° ID d'appareil (17)
(5) ID commande (DT1)
00 10
11
20 02 22 00
00 00 00 31 ??
(4)
(5)
addresse
donnée Checksum
(2) n° ID (Roland)
(3) n° ID d'appareil (17)
(5) ID commande (RQ1)
??
F7
(6)
(6) Fin de message exclusif
F7
(6)
(6) Fin de message exclusif