Implémentation MIDI
■Exemples de messages MIDI courants
<Exemple 1> 92 3E 5F
9n est l'octet de statut «Note On» où «n» représente le numéro de canal MIDI . Comme 2H =
2, 3EH = 62 et 5FH = 95, ce message décrit une touche enfoncée, affectée au canal MIDI n°3
et de numéro de note 62 (soit ré 4 ou «D4») affectée d'une vélocité de 95.
<Exemple 2> CE 49
CnH est l'octet de statut «Program Change» où «n» représente le numéro de canal MIDI .
Comme EH = 14, et 49H = 73, ce message décrit un changement de programme sur le canal
MIDI n°15, appellant le son n°74 (Flute, dans le standard GS).
<Exemple 3> EA 00 28
EnH est l'octet de statut «Pitch Bend Change» où «n» représente le numéro de canal MIDI.
Le deuxième octet (00H = 0) est l'octet de poids faible (LSB), et le troisième (28H = 40) l'octet
de poids fort (MSB), mais comme la valeur de pitch-bend varie dans les sens positif et
négatif avec une valeur centrale à 40 00H (= 64 x 12+80 = 8192) cette valeur est :
28 00H - 40 00H = 40 x 12+80 - (64 x 12+80) = 5120 - 8192 = -3072
Si la sensibilité du pitch-bend est réglée sur 2 demi-tons -8192 (00 00H) déplacera la hauteur
du son de -200 cents, et dans notre cas : -200 x (-3072) ÷ (-8192) = -75 cents sur le canal 11.
<Exemple 4> B3 64 00 65 00 06 0C 26 00 64 7F 65 7F
BnH est l'octet de statut «Control Change» où «n» représente le numéro de canal MIDI.
Dans ces messages, le deuxième octet détermine le numéro de contrôle et le troisième son
amplitude. Quand plusieurs messages consécutifs ont le même statut, le standard MIDI
prévoit un mode «running Statut» qui permet de le sous-entendre et de ne ne pas le répéter.
Le message ci-dessus signifie donc :
B3 64 00
MIDI ch.4, octet faible du numéro de paramètre RPN :
(B3) 65 00
(MIDI ch.4) octet fort du numéro de paramètre RPN :
(B3) 06 0C
(MIDI ch.4) octet fort de la valeur du paramètre :
(B3) 26 00
(MIDI ch.4) octet faible de la valeur du paramètre :
(B3) 64 7F
(MIDI ch.4) octet faible du numéro de paramètre RPN :
(B3)
65 7F
(MIDI ch.4) octet fort du numéro de paramètre RPN :
Ces messages définissent donc une valeur de 0C 00H pour le numéro de paramètre RPN 00
00H sur le canal MIDI 4, puis affectent le numéro de paramètre RPN à 7F 7FH.
Le paramètre RPN 00 00H est la sensibilité du Pitch Bend et le MSB de la valeur indique des
unités d'un demi-ton. Une valeur de 0CH = 12 règle donc l'amplitude sur +/-12 demi-tons
soit une octave. (Sur les générateurs de son GS, le LSB de la sensibilité du Pitch Bend est
ignoré, mais le LSB doit être transmis (avec une valeur de 0) afin que le fonctionnement soit
identique quel que soit l'appareil.
Dès qu'un message RPN est reçu, les messages Data Entry reçus sur le même canal MIDI
sont interprétés comme message de valeur RPN. Pour éviter toute source d'erreur, la
transmission d'un message RPN Null est donc recommandée après avoir effectué votre
changement de valeur. C'est la raison d'être de la fin du message : (B3) 64 7F (B3) 65 7F.
Il n'est pas souhaitable, pour des données de séquence (fichiers MIDI File, par exemple) de
gérer beaucoup de données en «running statut» à la manière de l'exemple 4. En effet, si la
lecture du morceau est interrompue, le séquenceur pourrait ensuite ne pas pouvoir
retransmettre le bon statut en repartant en milieu de morceau et le générateur de son ne
pourrait pas interpréter les données reçues.
Il est aussi nécessaire que les numéros de paramètres RPN ou NRPN et leurs valeurs soient
émises dans le bon ordre. Dans certains séquenceurs, les évènements présents sur la même
division d'horloge peuvent être retransmis dans un ordre différent de celui dans lequel ils
ont été reçus. Il est, de ce fait, toujours meilleur de décaler légèrement chaque évènement
(1 tick pour un séquenceur ayant une définition de 96 tics par noire, ou 5 ticks pour ceux qui
auraient une définition de 480 ticks par noire).
160
■
Exemple de messages système exclusif et calcul
du Checksum
Les messages Système exclusif Roland (RQ1, DT1) sont transmis avec un checksum (total) à
la fin de l'envoi des données (avant F7) pour vérifier leur bonne transmission. La valeur du
checksum est déterminée par l'adresse et les données (ou la taille) du message système
exclusif.
●Comment calculer le checksum
(les valeurs hexadécimales sont suivies d'un «H»)
Le checksum est une valeur dont les 7 bits les plus faibles sont des 0 quand l'adresse, la
taille et le checksum lui-même lui sont ajoutés. La formule suivante montre comment
calculer le checksum quand le message exclusif à transmettre a une adresse : aa bb cc ddH et
une taille de données : ee ffH
aa + bb + cc + dd + ee + ff = total
total ÷ 128 = quotient ... reste
128 - reste = checksum
<Exemple 1> Réglage du CHORUS TYPE sur DELAY (DT1)
Selon la «Table des adresses de paramètres» (p. 153) l'adresse de départ des performances
temporaires (Temporary Performance) est 10 00 00 00H, l'adresse d'offset du CHORUS en
Setup est 04 00H, et l'adresse du CHORUS TYPE est 00 00H. L'adresse du CHORUS TYPE
en Setup est donc :
10 00 00 00H
04 00H
+)
00 00H
10 00 04 00H
00H
le DELAY a la valeur 02H.
00H
0CH
Le message à transmettre sera donc :
00H
F0
41
10
7FH
(1)
(2)
(3)
7FH
(1) Début de message système exclusif (2) ID (Roland) (3) Device ID (17)
(4) Model ID (RD-700)
Calculons maintenant le checksum manquant.
10H + 00H + 04H + 00H + 02H = 16 + 0 + 4 + 0 + 2 = 22 (total)
22 (total) ÷ 128 = 0 (quotient) ... 22 (reste)
checksum = 128 - 22 (reste) = 106 = 6AH
Et le message final est donc : F0 41 10 00 10 12 10 00 04 00 02 6A F7.
<Exemple 2> Récupération des données de Setup temporaire (RQ1)
cf.) Cette opération est la même que le vidage temporaire de données du mode Utility.
Selon la «Table des adresses de paramètres» (p. 153), l'adresse de départ du Setup
temporaire est :
10 00 00 00H
10 00 69 00H
Comme la taille du Setup Tone Wheel est de 00 00 00 0BH, la somme de la taille (size) et du
Setup Tone Wheel 10 Back up dans le Setup temporaire
10 00 69 00H
+) 00 00 00 0BH
10 00 69 0BH
Et la taille à obtenir sera :
10 00 69 0BH
-) 10 00 00 00H
00 00 69 0BH
Le message système exclusif à émettre sera donc de la forme :
F0
41
10
(1)
(2)
(3)
(1) Début de message système exclusif (2) ID (Roland) (3) Device ID (17)
(4) Model ID (RD-700)
En calculant le checksum comme dans <Exemple 2>, nous obtenons un message complet F0
41 10 00 43 11 10 00 00 00 00 00 69 0B 7C.
00 43
12
10 00 04 00
02
(4)
(5)
adresse
données checksum(6)
(5) Command ID (DT1)
(6) Fin de SysEx (EOX)
Setup Common
:
Setup Tone Wheel 10 Backup
00 43
11
10 00 00 00
00 00 69 0B
(4)
(5)
adresse
données
(5) Command ID (RQ1)
(6) Fin de SysEx (EOX)
??
F7
??
F7
checksum
(6)