Aplicación MIDI
5. Supplementary material
GDecimal/Hexadecimal table
(hexadecimal values are indicated by a following "H")
MIDI uses 7-bit hexadecimal values to indicate data values and the address and size of exclusive
messages. The following table shows the correspondence between decimal and hexadecimal
numbers.
+——————+——————++——————+——————++——————+——————++——————+——————+
|
D
|
H
||
D
|
H
+——————+——————++——————+——————++——————+——————++——————+——————+
|
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 ||
+——————+——————++——————+——————++——————+——————++——————+——————+
D: decimal
H: hexadecimal
* Decimal expressions such as used for MIDI channel, Bank Select, and Program Change will be
the value 1 greater than the decimal value given in the above table.
* Since each MIDI byte carries 7 significant data bits, each byte can express a maximum of 128
different values. Data for which higher resolution is required must be transmitted using two or
more bytes. For example a value indicated as a two-byte value of aa bbH would have a value of aa
x 128 + bb.
* For a signed number (+/-), 00H = -64, 40H = +/-0, and 7FH = +63. I.e., the decimal equivalent
will be 64 less than the decimal value given in the above table. For a two-byte signed number, 00
00H = -8192, 40 00H = +/-0, and 7F 7FH = +8191. For example the decimal expression of aa bbH
would be aa bbH - 40 00H = (aa x 128 + bb - 64 x 128.
* Hexadecimal notation in two 4-bit units is used for data indicated as 'nibbled'. The nibbled two-
byte value of 0a 0b H would be a x 16 + b.
<Example 1>
What is the decimal equivalent of 5AH?
From the above table, 5AH = 90.
<Example 2>
What is the decimal equivalent of the 7-bit hexadecimal values 12 34H?
From the above table, 12H = 18 and 34H = 52
Thus, 18 x 128 + 52 = 2356
112
||
D
|
H
||
D
|
H
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 |
❍Examples of actual MIDI messages
<Example 1> 99 3E 7F
CnH is the Note On status and "n" is the MIDI channel number. Since 9H = 9, 3EH = 62, and 7FH =
127, this is a Note On message of MIDI CH = 10, Note number 62.
<Example 2> CE 49
CnH is the Program Change status and "n" is the MIDI channel number. Since 9H = 9, and 49H = 73,
this is a Program Change message of MIDI CH = 10, Program number 74.
❍Examples of exclusive messages and calculating the checksum
|
Roland exclusive messages (RQ1, DT1) are transmitted with a checksum at the end of the data
(before F7) to check that the data was received correctly. The value of the checksum is determined by
the address and data (or size) of the exclusive message.
❍How to calculate the checksum
(hexadecimal values are indicated by a "H")
The checksum consists of a value whose lower 7 bits are 0 when the address, size and checksum itself
are added.
The following formula shows how to calculate the checksum when the exclusive message to be
transmitted has an address of aa bb cc ddH, and data or size of ee ffH.
aa + bb + cc + dd + ee + ff = total
total / 128 = quotient ... remainder
128 - remainder = checksum
Checksum is 0 if the remainder is 0.
<Example 1> Setting the Instrument of the PAD A03 of the current Drum kit to 182.
The"Parameter address map" indicates that the starting address of the current Drum kit is 00 00 00
00H, that the Instrument of the PAD A03 offset address is 00 00 02 00H, and that the Instrument
address is 00 00 00 00H. Thus, the address is:
00 00 00 00H
00 00 02 00H
+) 00 00 00 00H
00 00 02 00H
Instrument 182 is parameter value B5H (182(B6H - 1)), and divides value into 4bit MSB and 4bit
LSB, so it is 0B 05H.
F0H
41H
09H
(1)
(2)
(3)
(1) Exclusive status
(4) model ID (DR-770)
Next we calculate the checksum.
00H + 00H + 02H + 00H + 0BH + 05H = 0 + 0 + 2 + 0 + 11 + 5 = 18 (sum)
18 (total) ÷ 128 (quotient) = 0 (quotient) ... 18 (remainder)
checksum = 128 - 18 (quotient) =110 = 6EH
This means that the message transmitted will be F0 41 09 00 1C 12 00 00 02 00 0B 05 6E F7 .
<Example 2> Retrieving data for PAD B01 of the current Drum kit.
The "Parameter address map" indicates that the starting address of the current Drum kit is 00 00 00
00H, and that the PAD B01 offset address is 00 00 10 00H. Thus, the address is:
00 00 00 00H
+) 00 00 10 00H
00 00 10 00H
Since the size of the PAD parameter is 00 00 00 0CH,
F0H
41H
09H
(1)
(2)
(3)
(1) Exclusive status
(4) model ID (DR-770)
Next we calculate the checksum.
00 1CH
12H
00 00 02 00H
0B 05H
(4)
(5)
address
(2) ID number (Roland)
(3) device ID (10)
(5) command ID (DT1)
(6) End of Exclusive
00 1CH
11H
00 00 10 00H
00 00 00 0CH
(4)
(5)
address
size
(2) ID number (Roland)
(3) device ID(10)
(5) command ID (RQ1)
(6) End of Exclusive
??H
F7H
data
checksum
(6)
??H
F7H
checksum
(6)