Implémentation MIDI
4. Annexes
● Correspondance entre décimal et héxadécimal
(Un nombre héxadécimal est affiché avec un H.)
Dans la documentation MIDI, les valeurs des données et les adresses/taille des messages
exclusifs sont exprimés en valeurs héxadécimales pour chaque groupe de 7 bits. Le tableau
suivant indique la correspondance de ces nombres avec des nombres décimaux.
+——————+——————++——————+——————++——————+——————++——————+——————+
|
dec |
hex ||
dec |
hex ||
+——————+——————++——————+——————++——————+——————++——————+——————+
|
0 |
00H ||
32 |
20H ||
|
1 |
01H ||
33 |
21H ||
|
2 |
02H ||
34 |
22H ||
|
3 |
03H ||
35 |
23H ||
|
4 |
04H ||
36 |
24H ||
|
5 |
05H ||
37 |
25H ||
|
6 |
06H ||
38 |
26H ||
|
7 |
07H ||
39 |
27H ||
|
8 |
08H ||
40 |
28H ||
|
9 |
09H ||
41 |
29H ||
|
10 |
0AH ||
42 |
2AH ||
|
11 |
0BH ||
43 |
2BH ||
|
12 |
0CH ||
44 |
2CH ||
|
13 |
0DH ||
45 |
2DH ||
|
14 |
0EH ||
46 |
2EH ||
|
15 |
0FH ||
47 |
2FH ||
|
16 |
10H ||
48 |
30H ||
|
17 |
11H ||
49 |
31H ||
|
18 |
12H ||
50 |
32H ||
|
19 |
13H ||
51 |
33H ||
|
20 |
14H ||
52 |
34H ||
|
21 |
15H ||
53 |
35H ||
|
22 |
16H ||
54 |
36H ||
|
23 |
17H ||
55 |
37H ||
|
24 |
18H ||
56 |
38H ||
|
25 |
19H ||
57 |
39H ||
|
26 |
1AH ||
58 |
3AH ||
|
27 |
1BH ||
59 |
3BH ||
|
28 |
1CH ||
60 |
3CH ||
|
29 |
1DH ||
61 |
3DH ||
|
30 |
1EH ||
62 |
3EH ||
|
31 |
1FH ||
63 |
3FH ||
+——————+——————++——————+——————++——————+——————++——————+——————+
* Les valeurs décimales comme le canal MIDI, la sélection de banque et les Program
Change sont affichés par un (1) plus gros que les autres valeurs numériques.
* Un octet de 7 bits peut exprimer une plage de données de 128 valeurs. Pour des
données où une précision plus importante est requise, deux ou plusieurs octets doivent
être utilisés. Par exemple, deux nombres héxadécimaux aa bbH donnant la valeur de
deux octets de 7 bits indiquent une valeur de aa x 128 + bb.
* Pour les valeurs ayant besoin d'un signe ±, 00H = -64, 40H = ±0, et 7FH = +63, pour que
la valeur décimale soit de 64 unités en moins que la valeur donnée par le tableau plus
haut. Pour deux octets, 00 00H = -8192, 40 00H = ±0, et 7F 7FH = +8191.
* Ces données sont des données héxadécimales à 4 bits. Une telle donnée 0a 0bH a pour
valeur décimale a x 16 + b.
<Ex.1> Qu'est-ce que 5AH en décimal?
5AH = 90 d'après le tableau.
<Ex.2>Qu'est ce que 12034H en décimal?
12H = 18, 34H = 52 d'après le tableau. Donc 18 x 128 + 52 = 2356.
<Ex.3> Qu'est-ce que 0A 03 09 0D "converti" en décimal ?
0AH = 10, 03H = 3, 09H = 9, 0DH = 13 d'après le tableau.
So ((10 x 16 + 3) x 16 + 9) x 16 + 13 = 41885.
<Ex. 4> Qu'est ce que 1258 du système décimal en système "converti"?
_____
16)1258
16)
78 ... 10
16)
4 ... 14
0 ... 4
0 = 00H, 4 = 04H, 14 = 0EH, 10 = 0AH d'après le tableau. Donc c'est 00 04 0E 0AH.
116
dec |
hex ||
dec |
hex |
64 |
40H ||
96 |
60H |
65 |
41H ||
97 |
61H |
66 |
42H ||
98 |
62H |
67 |
43H ||
99 |
63H |
68 |
44H ||
100 |
64H |
69 |
45H ||
101 |
65H |
70 |
46H ||
102 |
66H |
71 |
47H ||
103 |
67H |
72 |
48H ||
104 |
68H |
73 |
49H ||
105 |
69H |
74 |
4AH ||
106 |
6AH |
75 |
4BH ||
107 |
6BH |
76 |
4CH ||
108 |
6CH |
77 |
4DH ||
109 |
6DH |
78 |
4EH ||
110 |
6EH |
79 |
4FH ||
111 |
6FH |
80 |
50H ||
112 |
70H |
81 |
51H ||
113 |
71H |
82 |
52H ||
114 |
72H |
83 |
53H ||
115 |
73H |
84 |
54H ||
116 |
74H |
85 |
55H ||
117 |
75H |
86 |
56H ||
118 |
76H |
87 |
57H ||
119 |
77H |
88 |
58H ||
120 |
78H |
89 |
59H ||
121 |
79H |
90 |
5AH ||
122 |
7AH |
91 |
5BH ||
123 |
7BH |
92 |
5CH ||
124 |
7CH |
93 |
5DH ||
125 |
7DH |
94 |
5EH ||
126 |
7EH |
95 |
5FH ||
127 |
7FH |
● Exemple de message exclusif et de calcul du
Checksum
Avec les messages exclusifs Roland (DT1), un checksum est ajouté à la fin des données
transmises (avant F7) pour vérifier que le message est reçu correctement. La valeur du
checksum est définie par l'addresse et les données (ou la taille) du message exclusif à
transmettre.
✧ Comment calculer le checksum (Les chiffres en héxadécimal sont
indiqués par un H.)
Le checksum est la somme des bit de l'addresse et de données (ou de la taille). Si l'addresse
du message exclusif est transmise sous la forme aa bb ccH et que les données ou la taille
sont de la forme dd ee ffH
aa + bb + cc + dd + ee + ff = somme
somme / 128 = quotient et reste
Lorsque le reste est 0, 0 = checksum
Lorsque le reste est différent de 0, 128 - reste = checksum