MIDI Implementation
13
It is also necessary that the RPN 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 5> 99 2C 7F B9 04 7F 04 40
9n is the Note-on status, and n is the MIDI channel number. BnH is the Control
Change status, and n is the MIDI channel number. Thus, the above messages have the
following meaning.
99 2C 7F
MIDI ch. 10, Note On message
B9 04 7F
MIDI ch. 10, foot controller: 7FH
(B9) 04 40
(MIDI ch. 10), foot controller: 40H
In other words, with these messages a Note On message with a note number of
44 (G#2) and velocity of 127 is transmitted on MIDI Channel 10, and then the foot
controller value is set from 127 to 64.
According to the settings made at the factory, the drum part is assigned to MIDI
Channel 10, Note Number 44 is assigned to the pedal hi-hat, and the foot controller
is set to “HH Pedal CC;” in this case, the TD-30 plays a foot splash when the message is
received.
■
■ ■■
Calculation of the Checksum of Exclusive Messages
Roland Exclusive messages (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 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, data and checksum itself and
inverting the lower 7 bits.
Here’s 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 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.)