* 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 "nib-
bled". 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 hexa-
decimal values 12 34H?
From the above table, 12H = 18 and 34H = 52
Thus, 18 x 128 + 52 = 2356
<Example 3> What is the decimal equivalent of the nibbled
expression 0A 03 09 0DH?
From the above table, 0AH = 10, 03H = 3, 09H = 9, 0DH = 13
Thus, the result is ((10 x 16 + 3) x 16 + 9) x 16 + 13 = 41885
<Example 4> What is the nibbled equivalent of the decimal
number 1258?
16 ) 1258
16 )
78 ...10
16 )
4 ...14
0 ... 4
From the above table, 0=00H, 4=04H, 14=0EH, 10=0AH
Thus the result is 00 04 0E 0AH
Examples of actual MIDI messages
<Example 1> 92 3E 5F
9n is the Note On status and 'n' is the MIDI channel number. Since 2H = 2,
3EH = 62, and 5FH = 95, this is a Note On message of MIDI CH = 3, note num-
ber 62 (note name D4) and velocity 95.
<Example 2> CE 49
CnH is the Program Change status and 'n' is the MIDI channel number. Since
EH = 14, and 49H = 73, this is a Program Change message of MIDI CH = 15,
Program number 74 (in the GS sound map, Flute).
<Example 3> EA 00 28
EnH is the Pitch Bend Change status and 'n' is the MIDI channel number. The
2nd byte (00H=0) is the LSB of the Pitch Bend value, and the 3rd byte
(28H=40) is the MSB. However since the Pitch Bend is a signed number with 0
at 40 00H ( = 64 x 128 + 0 = 8192), the Pitch Bend value in this case is
28 00H - 40 00H = 40 x 128 + 0 - (64 x 128 + 0) = 5120 - 8192 = -3072
If we assume that the Pitch Bend Sensitivity is set to two semitones, the pitch
will change only -200 cents for a Pitch Bend value of -8192 (00 00H). Thus, this
message is specifying a Pitch Bend of -200 x (-3072) ÷ (-8192) = -75 cents on
MIDI CH = 11.
<Example 4> B3 64 00 65 00 06 0C 26 00 64 7F 65 7F
BnH is the Control Change status, and 'n' is the MIDI channel number. In
Control Change messages, the 2nd byte is the controller number, and the 3rd
byte is the parameter value. MIDI allows what is known as "running status,"
when if messages of the the same status follow each other, it is permitted to
omit the second and following status bytes. In the message above, running
status is being used, meaning that the message has the following content.
B3 64 00
MIDI CH = 4, RPN parameter number LSB
(B3) 65 00
MIDI CH = 4, RPN parameter number MSB : 00H
(B3) 06 0C
MIDI CH = 4, parameter value MSB
(B3) 26 00
MIDI CH = 4, parameter value LSB
(B3) 64 7F
MIDI CH = 4, RPN parameter number LSB
(B3) 65 7F
MIDI CH = 4, RPN parameter number MSB : 7FH
Thus, this message transmits a parameter value of 0C 00H to RPN parameter
number 00 00H on MIDI CH = 4, and then sets the RPN parameter number to
7F 7FH.
: 00H
: 0CH
: 00H
: 7FH
Capítulo 12. Material suplementario
The function assigned to RPN parameter number 00 00H is Pitch Bend
Sensitivity, and the MSB of the parameter value indicates semitone steps.
Since the MSB of this parameter value is 0CH = 12, the maximum width of
pitch bend is being set to ±12 semitones (1 octave) (GS sound sources ignore
the LSB of Pitch Bend Sensitivity, but it is best to transmit the LSB (parameter
value 0) as well, so that the message can be correctly received by any device.
Once the parameter number has been set for RPN or NRPN, all subsequent
Data Entry messages on that channel will be effective. Thus, it is recommen-
ded that after you have made the change you want, you set the parameter
number to 7F 7FH (an "unset" or "null" setting). The final (B3) 64 7F (B3) 65
7F is for this purpose.
It is not a good idea to store many events within the data of a song (e.g., a
Standard MIDI File song) using running status as shown in <Example 4>.
When the song is paused, fast-forwarded or rewound, the sequencer may not
be able to transmit the proper status, causing the sound source to misinterpret
the data. It is best to attach the proper status byte to all events.
It is also important to transmit RPN or NRPN parameter number settings and
parameter values in the correct order. In some sequencers, data events recor-
ded in the same clock (or a nearby clock) can sometimes be transmitted in an
order other than the order in which they were recorded. It is best to record
such events at an appropriate interval (1 tick at TPQN=96, or 5 ticks at
TPQN=480).
* TPQN : Ticks Per Quarter Note (i.e., the time resolution of the sequencer)
Examples of exclusive messages and calculating the check-
sum
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 indi-
cated 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 exclu-
sive 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
<Example 1> Setting the Performance Common REVERB TYPE
to DELAY (DT1).
The "Parameter address map" indicates that the starting address of the
Temporary Performance is 01 00 00 00H, that the Performance Common offset
address is 00 00H, and that the REVERB TYPE address is 00 28H. Thus, the
address is:
01 00 00 00H
00 00H
+)
00 28H
01 00 00 28H
Since DELAY is parameter value 06H,
F0
41
10
6A
12
01 00 00 28
(1) (2) (3) (4) (5) address
(1) Exclusive status
(2) ID number (Roland)
(4) model ID (XP-60/XP-80) (5) command ID (DT1)
Next we calculate the checksum.
01H + 00H + 00H + 28H + 06H = 1 + 0 + 0 + 40 + 6 = 47 (sum)
47 (total) ÷ 128 = 0 (quotient) ... 47 (remainder)
checksum = 128 - 47 (quotient) = 81 = 51H
This means that the message transmitted will be F0 41 10 6A 12 01 00 00 28 06
51 F7.
<Example 2> Retrieving data for USER:03 Performance Part 3
(RQ1)
The "Parameter address map" indicates that the starting address of USER:03
is 10 02 00 00H, and that the offset address of Performance Part 3 is 12 00H.
Thus, the address is:
10 02 00 00H
+)
12 00H
10 02 12 00H
06
??
F7
data
checksum (6)
(3) device ID(17)
(6) EOX
227