Examples of actual midi message, Midi implementation – Roland TD-6 User Manual
Page 146
146
MIDI Implementation
■
Examples of actual MIDI message
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 with MIDI CH = 3, note number 62 (note
name is D4), and velocity 95.
CnH is the Program Change status, and n is the MIDI channel number. Since 9H =
9 and 20H = 32, this is a Program Change message with MIDI CH = 10, program
number 33 (Drum Kit No.33).
EnH is the Pitch Bend Change status, and n is the MIDI channel number. The 2nd
byte (00H=0) is the LSB and the 3rd byte (28H=40) is the MSB, but Pitch Bend Value
is a signed number in which 40 00H ( = 64 x 128 + 0 = 8192) is 0, so this Pitch Bend
Value is
28 00H - 40 00H = 40 x 128 + 0 - (64 x 128 + 0) = 5120 - 8192 = -3072
BnH is the Control Change status, and n is the MIDI channel number. For Control
Changes, the 2nd byte is the control number, and the 3rd byte is the value. In a case
in which two or more messages consecutive messages have the same status, MIDI
has a provision called "running status" which allows the status byte of the second
and following messages to be omitted. Thus, the above messages have the
following meaning.
B3 64 00
MIDI ch.4, lower byte of RPN parameter number:
00H
(B3) 65 00
(MIDI ch.4) upper byte of RPN parameter number:
00H
(B3) 06 0C
(MIDI ch.4) upper byte of parameter value:
0CH
(B3) 26 00
(MIDI ch.4) lower byte of parameter value:
00H
(B3) 64 7F
(MIDI ch.4) lower byte of RPN parameter number:
7FH
(B3) 65 7F
(MIDI ch.4) upper byte of RPN parameter number:
7FH
In other words, the above messages specify a value of 0C 00H for RPN parameter
number 00 00H on MIDI channel 4, and then set the RPN parameter number to 7F
7FH.
RPN parameter number 00 00H is Pitch Bend Sensitivity, and the MSB of the value
indicates semitone units, so a value of 0CH = 12 sets the maximum pitch bend
range to +- 12 semitones (1 octave). (On GS sound sources the LSB of Pitch Bend
Sensitivity is ignored, but the LSB should be transmitted anyway (with a value of 0)
so that operation will be correct on any device.)
Once the parameter number has been specified for RPN or NRPN, all Data Entry
messages transmitted on that same channel will be valid, so after the desired value
has been transmitted, it is a good idea to set the parameter number to 7F 7FH to
prevent accidents. This is the reason for the (B3) 64 7F (B3) 65 7F at the end.
It is not desirable for performance data (such as Standard MIDI File data) to contain
many events with running status as given in
playback is halted during the song and then rewound or fast-forwarded, the
sequencer may not be able to transmit the correct status, and the sound source will
then misinterpret the data. Take care to give each event its own status.
It is also necessary that the RPN or NRPN parameter number setting and the value
setting be done in the proper order. On some sequencers, events occurring in the
same (or consecutive) clock may be transmitted in an order different than the order
in which they were received. For this reason it is a good idea to slightly skew the
time of each event (about 1 tick for TPQN =96, and about 5 ticks for TPQN =480).
*
TPQN : Ticks Per Quarter Note
●
Example of an Exclusive message
and calculating a Checksum
Roland Exclusive messages (RQ1, DT1) are transmitted with a checksum at the end
(before F7) to make sure that the message was correctly received. The value of the
checksum is determined by the address and data (or size) of the transmitted
exclusive message.
❍
How to calculate the checksum
(hexadecimal numbers are indicated by "H")
The checksum is a value derived by adding the address, size and checksum itself
and inverting the lower 7 bits.
Heres an example of how the checksum is calculated. We will assume that in the
exclusive message we are transmitting, the address is aa bb cc ddH and the data or
size is ee ff gg hhH.
aa + bb + cc + dd + ee + ff + gg + hh = sum
sum / 128 = quotient ... remainder
128 - remainder = checksum
(However, the checksum will be 0 if the remainder is 0.)
"ALTERNATE".
According to the "Parameter address map", the drum kit No.1 has an address of 01
00 00 00H, drum kit pad parameter of Trigger 2 has a offset address of 03 00H and
pan has a offset address of 26H. Thus,
01 00 00 00
03 00
+) 26
01 00 03 26
and "ALTERNATE" is a value of 20H,
F0
41
10
00 3F 12
01 00 03 26
20
??
F7
(1)
(2)
(3)
(4)
(5)
address
data
checksum
(6)
(1) Exclusive status, (2) ID number (Roland), (3) Device ID (17)
(4) Model ID (TD-6), (5) Command ID (DT1), (6) EOX
Next we calculate the checksum.
01H + 00H + 03H + 26H + 20H = 1 + 0 + 3 + 38 + 32 = 74 (sum)
74 (sum)/ 128 = 0 (quotient) ... 74 (remainder)
checksum = 128 - 74 (remainder) = 54 = 36H
This means that F0 41 10 00 3F 12 01 00 03 26 20 36 F7 is the message we transmit.
kit 1.
According to the "Parameter address map",the drum kit No.1 has an address of 01
00 00 00H, drum kit common parameter has a offset address of 00 00H
and master volume has a offset address of 15H. Thus,
01 00 00 00
00 00
+) 15
01 00 00 15
Since Size = 00 00 00 01H,
F0
41
10
00 3F
11
01 00 00 15
00 00 00 01
??
F7
(1)
(2)
(3)
(4)
(5)
address
size
checksum
(6)
(1) Exclusive status, (2) ID number (Roland), (3) Device ID (17)
(4) Model ID (TD-6), (5) Command ID (RQ1), (6) EOX
Next we calculate the checksum.
01H + 00H + 00H + 15H + 00H + 00H +00H + 01H = 1 + 0 + 0 + 21 + 0 + 0 + 0 + 1 =
23 (sum)
23 (sum) / 128 = 0(quotient) ... 23 (remainder)
checksum = 128 - 23 (remainder) = 105 = 69H
This means that F0 41 10 00 3F 11 01 00 00 15 00 00 00 01 69 F7 is the message we
transmit.