
MIDI Implementation
4. Supplementary material
■Decimal/Hexadecimal Table
MIDI uses
the correspondence between decimal and hexadecimal numbers.
*Hexadecimal values are indicated by a following ‘H.’
0 | 00H | 32 | 20H | 64 | 40H | 96 | 60H | |||||||||
1 | 01H | 33 | 21H | 65 | 41H | 97 | 61H | |||||||||
2 | 02H | 34 | 22H | 66 | 42H | 98 | 62H | |||||||||
3 | 03H | 35 | 23H | 67 | 43H | 99 | 63H | |||||||||
4 | 04H | 36 | 24H | 68 | 44H | 100 | 64H | |||||||||
5 | 05H | 37 | 25H | 69 | 45H | 101 | 65H | |||||||||
6 | 06H | 38 | 26H | 70 | 46H | 102 | 66H | |||||||||
7 | 07H | 39 | 27H | 71 | 47H | 103 | 67H | |||||||||
8 | 08H | 40 | 28H | 72 | 48H | 104 | 68H | |||||||||
9 | 09H | 41 | 29H | 73 | 49H | 105 | 69H | |||||||||
10 | 0AH | 42 | 2AH | 74 | 4AH | 106 | 6AH | |||||||||
11 | 0BH | 43 | 2BH | 75 | 4BH | 107 | 6BH | |||||||||
12 | 0CH | 44 | 2CH | 76 | 4CH | 108 | 6CH | |||||||||
13 | 0DH | 45 | 2DH | 77 | 4DH | 109 | 6DH | |||||||||
14 | 0EH | 46 | 2EH | 78 | 4EH | 110 | 6EH | |||||||||
15 | 0FH | 47 | 2FH | 79 | 4FH | 111 | 6FH | |||||||||
16 | 10H | 48 | 30H | 80 | 50H | 112 | 70H | |||||||||
17 | 11H | 49 | 31H | 81 | 51H | 113 | 71H | |||||||||
18 | 12H | 50 | 32H | 82 | 52H | 114 | 72H | |||||||||
19 | 13H | 51 | 33H | 83 | 53H | 115 | 73H | |||||||||
20 | 14H | 52 | 34H | 84 | 54H | 116 | 74H | |||||||||
21 | 15H | 53 | 35H | 85 | 55H | 117 | 75H | |||||||||
22 | 16H | 54 | 36H | 86 | 56H | 118 | 76H | |||||||||
23 | 17H | 55 | 37H | 87 | 57H | 119 | 77H | |||||||||
24 | 18H | 56 | 38H | 88 | 58H | 120 | 78H | |||||||||
25 | 19H | 57 | 39H | 89 | 59H | 121 | 79H | |||||||||
26 | 1AH | 58 | 3AH | 90 | 5AH | 122 | 7AH | |||||||||
27 | 1BH | 59 | 3BH | 91 | 5BH | 123 | 7BH | |||||||||
28 | 1CH | 60 | 3CH | 92 | 5CH | 124 | 7CH | |||||||||
29 | 1DH | 61 | 3DH | 93 | 5DH | 125 | 7DH | |||||||||
30 | 1EH | 62 | 3EH | 94 | 5EH | 126 | 7EH | |||||||||
31 | 1FH | 63 | 3FH | 95 | 5FH | 127 | 7FH |
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
*For a signed number (±), 00H =
Hexadecimal notation in two
<Example1> What is the decimal equivalent of 5AH?
From the above table, 5AH = 90.
<Example2> What is the decimal equivalent of the
From the above table, 12H = 18 and 34H = 52
Thus, 18 x 128 + 52 = 2356
■Examples of Actual MIDI Messages
<Example1> 93 3E 5F
9n is the Note On status and ‘n’ is the MIDI channel number. Since 3H = 3, 3EH = 62, and 5FH = 95, this is a Note On message of MIDI CH = 4, note number 62 (note name D4) and velocity 95.
<Example2> C0 25
CnH is the Program Change status and ‘n’ is the MIDI channel number. Since 0H = 0, and 25H = 37, this is a Program Change message of MIDI CH = 1, Program number 38
■Examples of System 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
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
<Example1> Turn the Temporary Preset Organ percussion switch ON
(DT1).
The “Parameter address map” indicates that the starting address of the Temporary Preset is 10 00 00 00H, that the Preset Organ Parameter offset address is 10 00H, and that the “PERCUSSION SWITCH” address is 00 14H. Thus, the address is:
| 10 00 | 00 | 00H |
|
|
|
| |
|
|
| 10 | 00H |
|
|
|
|
+) |
|
| 00 14H |
|
|
|
| |
|
|
|
| |||||
| 10 00 | 10 | 14H |
|
|
|
| |
Since “ON” is parameter value 01H, |
|
|
| |||||
F0 | 41 | 10 | 00 4D | 12 10 00 10 14 | 01 | ?? | F7 | |
(1) | (2) | (3) | (4) | (5) address | data | checksum | (6) | |
(1) Exclusive status | (2) ID number (Roland) | (3) device ID(17) | ||||||
(4) model ID | (5) command ID (DT1) | (6) EOX |
|
Next we calculate the checksum.
10H + 00H + 10H + 14H + 01H = 16 + 0 + 16 + 20 + 1 = 53 (sum) 53 (total) ÷ 128 = 0 (quotient)... 53 (remainder)
checksum = 128 - 53 (quotient) = 75 = 4BH
This means that the message transmitted will be F0 41 10 00 4D 12 10 00 10 14 01 4B F7.
<Example2> Obtain preset organ parameter data for User Preset: 02
(RQ1).
The “Parameter address map” indicates that the starting address of USER: 02 is 20 01 00 00H, and that the offset address of Organ Parameter is 10 00H. Thus, the address is:
| 20 01 | 00 | 00H |
|
|
|
|
| |
+) |
|
| 10 00H |
|
|
|
|
| |
|
|
|
|
| |||||
| 20 01 | 10 | 00H |
|
|
|
|
| |
Since the size of the Performance Part is 00 00 00 1AH, |
|
| |||||||
F0 | 41 | 10 | 00 4D | 11 | 20 01 10 00 | 00 00 00 1A | ?? | F7 | |
(1) | (2) | (3) | (4) | (5) | address | data | checksum | (6) | |
(1) Exclusive status | (2) ID number (Roland) | (3) Device ID (17) | |||||||
(4) Model ID | (5) Command ID (RQ1) | (6) EOX |
|
Next we calculate the checksum.
20H + 01H + 10H + 00H + 00H + 00H + 00H + 1AH = 32 + 1 + 16 + 0 + 0 + 0 + 0 + 26 = 75 (sum)
75 (total) ÷ 128 = 0 (product)... 75 (remainder) checksum = 128 - 75 (remainder) = 53 = 35H
Thus, a message of F0 41 10 00 4D 11 20 01 10 00 00 00 00 1A 35 F7 would be transmitted.
76