[Software Synthesizer]Date:Nov. 9, 2001
MIDI Implementation
MODEL:HQ-GM2Ver. 1.00
Function ... Transmitted Recognized Remarks
Basic Channel Default x 1-16  
Changed x 1-16
Mode Default x Mode 3 *2
Messages x Mode 3, 4 (M = 1)
Altered *******  
Note Number   x 0-127  
True voice ******* 0-127
Velocity Note ON x o  
Note OFF x x
After Touch Key's x x  
Ch's x o *1
Pitch Bend x o  
Control Change 0, 32 x o Bank select
1 x o Modulation
5 x o Portamento time
6, 38 x o Data entry
7 x o Volume
10 x o Panpot
11 x o Expression
64 x o Hold1
65 x o Portamento
66 x o Sostenuto
67 x o Soft
71 x o Resonance
72 x o Release Time
73 x o Attack Time
74 x o Cutoff
75 x o Decay Time
76 x o Vibrato Rate
77 x o Vibrato Depth
78 x o Vibrato Delay
91 x o (Reverb) General purpose effects 1
93 x o (Chorus) General purpose effects 3
98, 99 x o NRPN LSB, MSB
100, 101 x o RPN LSB, MSB
Prog Change   x o  
True # ******* 0-127 Prog.1-128
System Exclusive x o  
System Common Song Pos x x  
Song Sel x x
Tune x x
System Real Times Clock x x  
Commands x x
Aux Messages All Sounds OFF x o (120, 126, 127)  
Reset All Controllers x o
Local ON/OFF x x
All Notes OFF x o (123-125)
Active Sensing x x
System Reset x x
Notes *1 o x is selectable
*2 Recognize as M = 1 even if M not EQ 1
Mode 1 : OMNI ON, POLY Mode 2 : OMNI ON, MONOo : Yes
Mode 3 : OMNI OFF, POLY Mode 4 : OMNI OFF, MONOx : No

Section 1. Receive data

Channel Voice Messages

<Note off>

Status 2nd byte 3rd byte
8nH kkH vvH
9nH kkH 00H

n = MIDI channel number : 0H-FH (ch.1-ch.16)
kk = note number : 00H-7FH (0-127)
vv = note off velocity : 00H-7FH (0-127)

* The velocity values of Note Off messages are ignored.

<Note on>

Status 2nd byte 3rd byte
9nH kkH vvH

n = MIDI channel number : 0H-FH (ch.1-ch.16)
kk = note number : 00H-7FH (0-127)
vv = note on velocity : 01H-7FH (1-127)

<Control Change>

> Bank Select (Controller number 0, 32)

Status 2nd byte 3rd byte
BnH 00H mmH
BnH 20H llH

n = MIDI channel number : 0H-FH (ch.1-ch.16)
mm, ll = Bank number : 00H, 00H-7FH, 7FH (bank.1-bank.16384), Initial Value = 00 00H (bank.1)

* When sending Bank Select messages, you have to send both the MSB (mmH) and LSB (llH) together.
* Bank Select processing will be suspended until a Program Change message is received.

BANK MSBBANK LSBPROGRAM NUMBERDESCRIPTION
001000 - 003001 - 128User Normal
002000001 - 128User Rhythm
120000001,009,017,
025,026,033,
041,049,057
GM2 Rhythm
121000 - 009001 - 128GM2 Normal

> Modulation (Controller number 1)

Status 2nd byte 3rd byte
BnH 01H vvH

n = MIDI channel number : 0H-FH (ch.1-ch.16)
vv = Modulation depth : 00H-7FH (0-127)

> Portamento Time (Controller number 5)

Status 2nd byte 3rd byte
BnH 05H vvH

n = MIDI channel number : 0H-FH (ch.1-ch.16)
vv = Portamento Time : 00H-7FH (0-127), Initial value = 00H (0)

> Data Entry (Controller number 6, 38)

Status 2nd byte 3rd byte
BnH 06H mmH
BnH 26H llH

n = MIDI channel number : 0H-FH (ch.1-ch.16)
mm, ll = the value of the parameter specified by RPN/NRPN

> Volume (Controller number 7)

Status 2nd byte 3rd byte
BnH 07H vvH

n = MIDI channel number : 0H-FH (ch.1-ch.16)
vv = Volume : 00H-7FH (0-127), Initial Value = 64H (100)

* Volume messages are used to adjust the volume balance of each Part.

> Pan (Controller number 10)

Status 2nd byte 3rd byte
BnH 0AH vvH

n = MIDI channel number : 0H-FH (ch.1-ch.16)
vv = pan : 00H-40H-7FH (Left-Center-Right), Initial Value = 40H (Center)

* Pan messages are used to adjust the pan setting of each part.
* For Rhythm Parts, this is a relative adjustment of each Instrument's pan setting.

> Expression (Controller number 11)

Status 2nd byte 3rd byte
BnH 0BH vvH

n = MIDI channel number : 0H-FH (ch.1-ch.16)
vv = Expression : 00H-7FH (0-127), Initial Value = 7FH (127)

* It can be used independently from Volume messages. Expression messages are used for musical expression within a performance; e.g., expression pedal movements, crescendo and decrescendo.

> Hold 1 (Controller number 64)

Status 2nd byte 3rd byte
BnH 40H vvH

n = MIDI channel number : 0H-FH (ch.1-ch.16)
vv = Control value : 00H-7FH (0-127) 0-63 = OFF, 64-127 = ON

> Portamento (Controller number 65)

Status 2nd byte 3rd byte
BnH 41H vvH

n = MIDI channel number : 0H-FH (ch.1-ch.16)
vv = Control value : 00H-7FH (0-127) 0-63 = OFF, 64-127 = ON

> Sostenuto (Controller number 66)

Status 2nd byte 3rd byte
BnH 42H vvH

n = MIDI channel number : 0H-FH (ch.1-ch.16)
vv = Control value : 00H-7FH (0-127) 0-63 = OFF, 64-127 = ON

> Soft (Controller number 67)

Status 2nd byte 3rd byte
BnH 43H vvH

n = MIDI channel number : 0H-FH (ch.1-ch.16)
vv = Control value : 00H-7FH (0-127) 0-63 = OFF, 64-127 = ON

* This message is effective only when you use piano sounds.

> Filter Resonance (Timebre/Harmonic Intensity) (Controller number 71)

Status 2nd byte 3rd byte
BnH 47H vvH

n = MIDI channel number : 0H-FH (ch.1-ch.16)
vv = Resonance value (relative change): 00H-7FH (-64 - 0 - +63), Initial Value = 40H (no change)

> Release Time (Controller number 72)

Status 2nd byte 3rd byte
BnH 48H vvH

n = MIDI channel number : 0H-FH (ch.1-ch.16)
vv = Release Time value (relative change): 00H-7FH (-64 - 0 - +63), Initial Value = 40H (no change)

> Attack Time (Controller number 73)

Status 2nd byte 3rd byte
BnH 49H vvH

n = MIDI channel number : 0H-FH (ch.1-ch.16)
vv = Attack Time value (relative change): 00H-7FH (-64 - 0 - +63), Initial Value = 40H (no change)

> Cutoff (Controller number 74)

Status 2nd byte 3rd byte
BnH 4AH vvH

n = MIDI channel number : 0H-FH (ch.1-ch.16)
vv = Cutoff value (relative change): 00H-7FH (-64 - 0 - +63), Initial Value = 40H (no change)

> Decay Time (Controller number 75)

Status 2nd byte 3rd byte
BnH 4BH vvH

n = MIDI channel number : 0H-FH (ch.1-ch.16)
vv = Decay Time value (relative change): 00H-7FH (-64 - 0 - +63), Initial Value = 40H (no change)

> Vibrato Rate (Controller number 76)

Status 2nd byte 3rd byte
BnH 4CH vvH

n = MIDI channel number : 0H-FH (ch.1-ch.16)
vv = Vibrato Rate value (relative change): 00H-7FH (-64 - 0 - +63), Initial Value = 40H (no change)

> Vibrato Depth (Controller number 77)

Status 2nd byte 3rd byte
BnH 4DH vvH

n = MIDI channel number : 0H-FH (ch.1-ch.16)
vv = Vibrato Depth value (relative change): 00H-7FH (-64 - 0 - +63), Initial Value = 40H (no change)

> Vibrato Delay (Controller number 78)

Status 2nd byte 3rd byte
BnH 4EH vvH

n = MIDI channel number : 0H-FH (ch.1-ch.16)
vv = Vibrato Delay value (relative change): 00H-7FH (-64 - 0 - +63), Initial Value = 40H (no change)

> Effect 1 (Reverb Send Level) (Controller number 91)

Status 2nd byte 3rd byte
BnH 5BH vvH

n = MIDI channel number : 0H-FH (ch.1-ch.16)
vv = Control value : 00H-7FH (0-127), Initial Value = 28H (40)

* This message adjusts the Reverb Send Level of each Part.

> Effect 3 (Chorus Send Level) (Controller number 93)

Status 2nd byte 3rd byte
BnH 5DH vvH

n = MIDI channel number : 0H-FH (ch.1-ch.16)
vv = Control value : 00H-7FH (0-127), Initial Value = 00H (0)0)

* This message adjusts the Chorus Send Level of each Part.

> NRPN MSB/LSB (Controller number 98, 99)

Status 2nd byte 3rd byte
BnH 63H mmH
BnH 62H llH

n = MIDI channel number : 0H-FH (ch.1-ch.16)
mm = upper byte of the parameter number specified by NRPN
ll = lower byte of the parameter number specified by NRPN

**NRPN**
The NRPN (Non Registered Parameter Number) message allows an extended range of control changes to be used.
To use these messages, you must first use NRPN MSB and NRPN LSB messages to specify the parameter to be controlled, and then use Data Entry messages to specify the value of the specified parameter. Once an NRPN parameter has been specified, all Data Entry messages received on that channel will modify the value of that parameter. To prevent accidents, it is recommended that you set RPN Null (RPN Number = 7FH/7FH) when you have finished setting the value of the desired parameter. Refer to Supplementary material "Examples of actual MIDI messages" <Example 4>. On the Hyper Canvas devices, Data entry LSB (llH) of NRPN is ignored, so it is no problem to send Data entry MSB (mmH) only (without Data entry LSB)

NRPN messages are used only for Hyper Canvas. Since the VST instruments cannot use exclusive messages, some of the functions defined by General MIDI 2 are assigned to NRPNs to be used with the Hyper Canvas.

On the Hyper Canvas, NRPN can be used to modify the following parameters.

NRPN MSB LSB Data entry MSB Explanation
58H 01H mmH Charactor (absolute change)
mm: 1CH-40H-64H (-36 - 0 - +36)
58H 20H mmH Tone control switch (absolute change)
mm: 00H-7FH (0 - 127) 0 - 63 = OFF, 64 - 127 = ON
58H 22H mmH Tone control bass gain (absolute change)
mm: 34H-40H-4CH (-12 - 0 - +12)
58H 24H mmH Tone control treble gain (absolute change)
mm: 34H-40H-4CH (-12 - 0 - +12)
58H 27H mmH Tone control mid gain (absolute change)
mm: 34H-40H-4CH (-12 - 0 - +12)
58H 30H-3BH mmH Scale tune C - B
mm: 00H-40H-7FH (-64 - 0 - +63 cent)
58H 40H mmH Reverb switch
mm: 00H-7FH (0 - 127) 0 - 63 = OFF, 64 - 127 = ON
* Sets the reverb settings regardless of the channel on which it's received.
58H 41H mmH Reverb type
mm: 00H-08H (00H = Small Room, 01H = Medium Room, 02H = Large Room, 03H = Medium Hall, 04H = Large Hall, 08H = Plate)
* Sets the reverb settings regardless of the channel on which it's received.
58H 42H mmH Reverb time
mm: 00H-7FH (0 - 127)
* Sets the reverb settings regardless of the channel on which it's received.
58H 50H mmH Chorus switch
mm: 00H-7FH (0 - 127) 0 - 63 = OFF, 64 - 127 = ON
* Sets the chorus settings regardless of the channel on which it's received.
58H 51H mmH Chorus type
mm: 00H-05H (00H = Chorus1, 01H = Chorus2, 02H = Chorus3, 03H = Chorus4, 04H = FB Chorus, 05H = Flanger)
* Sets the chorus settings regardless of the channel on which it's received.
58H 52H mmH Chorus rate
mm: 00H-7FH (0 - 127)
* Sets the chorus settings regardless of the channel on which it's received.
58H 53H mmH Chorus depth
mm: 00H-7FH (0 - 127)
* Sets the chorus settings regardless of the channel on which it's received.
58H 54H mmH Chorus feedback
mm: 00H-7FH (0 - 127)
* Sets the chorus settings regardless of the channel on which it's received.
58H 55H mmH Chorus send to reverb
mm: 00H-7FH (0 - 127)
* Sets the chorus settings regardless of the channel on which it's received.
58H 70H mmH Master volume
mm: 00H-7FH (zero-maximum)
* Sets the master volume regardless of the channel on which it's received.
58H 71H mmH llH Master tuning
mm, ll: 00 00H-40 00H-7F 7FH (-100 - 0 - +99.99 cent)
* Sets the master tuning regardless of the channel on which it's received.
58H 72H mmH Master key shift
mm: 28H-40H-58H (-24 - 0 - +24)
* Sets the master key shift regardless of the channel on which it's received.
58H 7FH mmH System reset
mm: ignore
* Resets the synth to the initial state regardless of the channel on which it's received.
18H rrH mmH Pitch coarse of rhythm instrument (relative change)
rr: key number of rhythm instrument (21 - 108)
mm: 10H - 40H - 70H (-48 - 0 - +48)
19H rrH mmH Pitch fine of rhythm instrument (relative change)
rr: key number of rhythm instrument(21 - 108)
mm: 0EH-40H-72H (-50 - 0 - 50)
1AH rrH mmH Rhythm instrument level(relative change)
rr: key number of rhythm instrument
mm: 00H-7FH (0 - 200 percent)
1CH rrH mmH Panpot of rhythm instrument (absolute change)
rr: key number of rhythm instrument
mm: 00H-40H-7FH (left-center-right)
1DH rrH mmH Reverb send level of rhythm instrument (absolute change)
rr: key number of rhythm instrument
mm: 00H-7FH (zero-maximum)
1EH rrH mmH Chorus send level of drum instrument (absolute change)
rr: key number of drum instrument
mm: 00H-7FH (zero-maximum)

* Parameters marked "relative change" will change relative to the preset value. Depending on the sound or the pitch range, this may have no effect.
* Parameters marked "absolute change" will be set to the absolute value of the parameter, regardless of the preset value.

> RPN MSB/LSB (Controller number 100, 101)

Status 2nd byte 3rd byte
BnH 65H mmH
BnH 64H llH

n = MIDI channel number : 0H-FH (ch.1-ch.16)
mm = upper byte of parameter number specified by RPN
ll = lower byte of parameter number specified by RPN

**RPN**
The RPN (Registered Parameter Number) messages are expanded control changes, and each function of an RPN is described by the MIDI Standard.
To use these messages, you must first use RPN MSB and RPN LSB messages to specify the parameter to be controlled, and then use Data Entry messages to specify the value of the specified parameter. Once an RPN parameter has been specified, all Data Entry messages received on that channel will modify the value of that parameter. To prevent accidents, it is recommended that you set RPN Null (RPN Number = 7FH/7FH) when you have finished setting the value of the desired parameter. Refer to Section "Examples of actual MIDI messages" <Example 4>

On the Hyper Canvas, RPN can be used to modify the following parameters.

RPN MSB LSB Data entry MSB LSB Explanation
00H 00H mmH --- Pitch Bend Sensitivity
mm: 00H-18H (0-24 semitones), Initial Value = 02H (2 semitones)
ll: ignored (processed as 00H)
specify up to 2 octaves in semitone steps
00H 01H mmH llH Master Fine Tuning
mm, ll: 00 00H - 40 00H - 7F 7FH (-100 - 0 - +99.99 cents), Initial Value = 40 00H (0 cent)
Refer to Supplementary material, "About tuning".
00H 02H mmH --- Master Coarse Tuning
mm: 30H-40H-70H (-48 - 0 - +48 semitones), Initial Value = 40H (0 semitone)
ll: ignored (processed as 00H)
00H 05H mmH llH

Modulation Depth Range
mm, ll: 00 00H - 06 00H (0.0 - 600.0 cent)
00H-7FH (0 - 100 cents)
100/128 Cent/Value

7FH 7FH --- --- RPN null
Set condition where RPN and NRPN are unspecified. The data entry messages after set RPN null will be ignored. (No Data entry messages are required after RPN null).
Settings already made will not change.
mm, ll: ignored

<Program Change>

Status 2nd byte
CnH ppH

n = MIDI channel number : 0H-FH (ch.1-ch.16)
pp = Program number : 00H-7FH (prog.1-prog.128)

<Channel Pressure>

Status 2nd byte
DnH vvH

n = MIDI channel number : 0H-FH (ch.1-ch.16)
vv = Channel Pressure : 00H-7FH (0-127)

* The specifics of the effect are determined by means of universal exclusive messages. In the default state, no effect is obtained.

<Pitch Bend Change>

Status 2nd byte 3rd byte
EnH llH mmH

n = MIDI channel number : 0H-FH (ch.1-ch.16)
mm, ll = Pitch Bend value : 00 00H - 40 00H - 7F 7FH (-8192 - 0 - +8191)

* The depth of pitch bend change is determined by the pitch bend sensitivity of the RPN.

Channel Mode Messages

<All Sounds Off (Controller number 120)>

Status 2nd byte 3rd byte
BnH 78H 00H

n = MIDI channel number : 0H-FH (ch.1-ch.16)

* When this message is received, all currently-sounding notes on the corresponding channel will be turned off immediately.

<Reset All Controllers (Controller number 121)>

Status 2nd byte 3rd byte
BnH 79H 00H

n = MIDI channel number : 0H-FH (ch.1-ch.16)

* When this message is received, the following controllers will be set to their reset values.

Controller Reset value
Pitch Bend Change 0 (center)
Channel Pressure 0 (off)
Modulation 0 (off)
Expression 127 (max)
Hold 1 0 (off)
Portamento 0 (off)
Sostenuto 0 (off)
Soft 0 (off)
RPN unset; previously set data will not change
NRPN unset; previously set data will not change

<All Notes Off (Controller number 123)>

Status 2nd byte 3rd byte
BnH 7BH 00H

n = MIDI channel number : 0H-FH (ch.1-ch.16)

* When All Notes Off is received, all notes on the corresponding channel will be turned off. However if Hold 1 or Sostenuto is ON, the sound will be continued until these are turned off.

<OMNI OFF (Controller number 124)>

Status 2nd byte 3rd byte
BnH 7CH 00H

n = MIDI channel number : 0H-FH (ch.1-ch.16)

* The same processing will be carried out as when All Notes Off is received.

<OMNI ON (Controller number 125)>

Status 2nd byte 3rd byte
BnH 7DH 00H

n = MIDI channel number : 0H-FH (ch.1-ch.16)

* OMNI ON is only recognized as "All notes off"; the Mode doesn't change (OMNI OFF remains).

<MONO (Controller number 126)>

Status 2nd byte 3rd byte
BnH 7EH mmH

n = MIDI channel number : 0H-FH (ch.1-ch.16)
mm = mono number : 00H-10H (0-16)

* The same processing will be carried out as when All Sounds Off and All Notes Off is received, and the corresponding channel will be set to Mode 4 (M = 1) regardless of the value of "mono number."

<POLY (Controller number 127)>

Status 2nd byte 3rd byte
BnH 7FH 00H

n = MIDI channel number : 0H-FH (ch.1-ch.16)

* The same processing will be carried out as when All Sounds Off and All Notes Off is received, and the corresponding channel will be set to Mode 3.

System Exclusive Message

Status Data byte Status
F0H iiH, ddH, ......, eeH F7H

F0H : System Exclusive Message status

ii = ID number : an ID number (manufacturer ID) to indicate the manufacturer whose Exclusive message this is. Roland's manufacturer ID is 41H.
ID numbers 7EH and 7FH are extensions of the MIDI standard; Universal Non-realtime Messages (7EH) and Universal Realtime Messages (7FH).

dd,...,ee = data : 00H-7FH (0-127)

F7H : EOX (End Of Exclusive)

The System Exclusive Messages received by the Hyper Canvas are; messages related to mode settings, Universal Realtime System Exclusive messages and Universal Non-realtime System Exclusive messages.

[Note] Reception of system exclusive messages is possible only for DXi.

<System exclusive messages related to mode settings>

> GM1 System On

This is a command message that resets the internal settings of the unit to the General MIDI System Level-1 initial state. After receiving this message Hyper Canvas, will automatically be set to the proper condition for correctly playing a General MIDI score.

Status Data byte Status
F0H 7EH, 7FH, 09H, 01H F7H
Byte Explanation
F0H Exclusive status
7EH ID number (Universal Non-realtime Message)
7FH Device ID (Broadcast)
09H Sub ID#1 (General MIDI Message)
01H Sub ID#2 (General MIDI 1 On)
F7H EOX (End Of Exclusive)

* There must be an interval of at least 50 ms between this message and the next message.

> GM2 System On

This is a command message that resets the internal settings of the unit to the General MIDI System Level-2 initial state. After receiving this message Hyper Canvas, will automatically be set to the proper condition for correctly playing a General MIDI score.

Status Data byte Status
F0H 7EH, 7FH, 09H, 03H F7H
Byte Explanation
F0H Exclusive status
7EH ID number (Universal Non-realtime Message)
7FH Device ID (Broadcast)
09H Sub ID#1 (General MIDI Message)
03H Sub ID#2 (General MIDI 2 On)
F7H EOX (End Of Exclusive)

* There must be an interval of at least 50 ms between this message and the next message.


> Scale/Octave Tuning Adjust

Status Data byte Status
F0H 7EH, 7FH, 08H, 08H, ffH, ggH, hhH, ssH,... F7H
Byte Explanation
F0H Exclusive status
7EH ID number (universal non-realtime message)
7FH Device ID (Broadcast)
08H Sub ID#1 (MIDI Tuning Standard)
08H Sub ID#2 (scale/octave tuning 1-byte form)

ffH

Channel/Option byte1
bits 0 to 1 = channel 15 to 16
bit 2 to 6 = Undefined

ggH

Channel byte2
bits 0 to 6 = channel 8 to 14

hhH

Channel byte3
bits 0 to 6 = channel 1 to 7

ssH 12 byte tuning offset of 12 semitones from C to B
00H = -64 [cents]
40H = 0 [cents] (equal temperament)
7FH = +63 [cents]
F7H EOX (End Of Exclusive)

<Universal Realtime System Exclusive Messages>

> Master volume

Status Data byte Status
F0H 7FH, 7FH, 04H, 01H, llH, mmH F7H
Byte Explanation
F0H Exclusive status
7FH ID number (universal realtime message)
7FH Device ID (Broadcast)
04H Sub ID#1 (Device Control messages)
01H Sub ID#2 (Master Volume)
llH Master volume lower byte
mmH Master volume upper byte
F7H EOX (End Of Exclusive)

* The lower byte (llH) of Master Volume will be handled as 00H.

> Master Fine Tuning

Status Data byte Status
F0H 7FH, 7FH, 04H, 03H, llH, mmH F7H
Byte Explanation
F0H Exclusive status
7FH ID number (universal realtime message)
7FH Device ID (Broadcast)
04H Sub ID#1 (Device Control messages)
03H Sub ID#2 (Master Fine Tuning)
llH Master Fine Tuning LSB
mmH Master Fine Tuning MSB
F7H EOX (End Of Exclusive)

* mm, ll : 00 00H - 40 00H - 7F 7FH (-100 - 0 - +99.9 [cents])

> Master Coarse Tuning

Status Data byte Status
F0H 7FH, 7FH, 04H, 04H, llH, mmH F7H
Byte Explanation
F0H Exclusive status
7FH ID number (universal realtime message)
7FH Device ID (Broadcast)
04H Sub ID#1 (Device Control messages)
04H Sub ID#2 (Master Coarse Tuning)
llH Master Coarse Tuning LSB
mmH Master Coarse Tuning MSB
F7H EOX (End Of Exclusive)

* llH : ignored (processed as 00H)
* mmH : 28H - 40H - 58H (-24 - 0 - +24 [semitones]) 

> Reverb Parameters

Status Data byte Status
F0H 7FH, 7FH, 04H, 05H, 01H, 01H, 01H, 01H, 01H, ppH, vvH F7H
Byte Explanation
F0H Exclusive status
7FH ID number (universal realtime message)
7FH Device ID (Broadcast)
04H Sub ID#1 (Device Control messages)
05H Sub ID#2 (Global Parameter Control)

01H

Slot path length

01H

Parameter ID width

01H

Value width

01H

Slot path MSB

01H

Slot path LSB (Effect 01 01:Reverb)

ppH Parameter to be controlled.
vvH Value for the parameter.
F7H EOX (End Of Exclusive)

pp=0

Reverb Type
vv = 00H : Small Room (Room1)
vv = 01H : Medium Room (Room2)
vv = 02H : Large Room (Room3)
vv = 03H : Medium Hall (Hall1)
vv = 04H : Large Hall (Hall2)
vv = 08H : Plate (Plate)

pp=1

Reverb Time
vv = 00H - 7FH : 0 - 127

> Chorus Parameters

Status Data byte Status
F0H 7FH, 7FH, 04H, 05H, 01H, 01H, 01H, 01H, 02H, ppH, vvH F7H
Byte Explanation
F0H Exclusive status
7FH ID number (universal realtime message)
7FH Device ID (Broadcast)
04H Sub ID#1 (Device Control messages)
05H Sub ID#2 (Global Parameter Control)

01H

Slot path length

01H

Parameter width

01H

Value width

01H

Slot path MSB

02H

Slot path LSB (Effect 01 02:Chorus)

ppH Parameter to be controlled.
vvH Value for the parameter.
F7H EOX (End Of Exclusive)

pp=0

Chorus Type
vv = 00H : Chorus1
vv = 01H : Chorus2
vv = 02H : Chorus3
vv = 03H : Chorus4
vv = 04H : FB Chorus
vv = 05H : Flanger

pp=1

Mod Rate
vv = 00H - 7FH : 0 - 127

pp=2

Mod Depth
vv = 00H - 7FH : 0 - 127

pp=3

Feedback
vv = 00H - 7FH : 0 - 127

pp=4

Send To Reverb
vv = 00H - 7FH : 0 - 127

> Channel Pressure

Status Data byte Status
F0H 7FH, 7FH, 09H, 01H, 0nH, ppH, rrH F7H
Byte Explanation
F0H Exclusive status
7FH ID number (universal realtime message)
7FH Device ID (Broadcast)
09H Sub ID#1 (Controller Destination Setting messages)
01H Sub ID#2 (Channel Pressure)

0nH

MIDI Channel (00-0F)

ppH Controlled parameter
rrH Controlled range
F7H EOX (End Of Exclusive)

pp=0

Pitch Control
rr = 28H - 58H : -24 - +24 [semitones]

pp=1

Filter Cutoff Control
rr = 00H - 7FH : -9600 - +9450 [cents]

pp=2

Amplitude Control
rr = 00H - 7FH : 0 - 200%

pp=3

LFO Pitch Depth
rr = 00H - 7FH : 0 - 600 [cents]

pp=4

LFO Filter Depth
rr = 00H - 7FH : 0 - 2400 [cents]

pp=5

LFO Amplitude Depth
rr = 00H - 7FH : 0 - 100%

> Controller

Status Data byte Status
F0H 7FH, 7FH, 09H, 03H, 0nH, ccH, ppH, rrH F7H
Byte Explanation
F0H Exclusive status
7FH ID number (universal realtime message)
7FH Device ID (Broadcast)
09H Sub ID#1 (Controller Destination Setting messages)
03H Sub ID#2 (Control Change)

0nH

MIDI Channel (00-0F)

ccH

Controller number (01-1FH, 40-5FH)

ppH Controlled parameter
rrH Controlled range
F7H EOX (End Of Exclusive)

pp=0

Pitch Control
rr = 28H - 58H : -24 - +24 [semitones]

pp=1

Filter Cutoff Control
rr = 00H - 7FH : -9600 - +9450 [cents]

pp=2

Amplitude Control
rr = 00H - 7FH : 0 - 200%

pp=3

LFO Pitch Depth
rr = 00H - 7FH : 0 - 600 [cents]

pp=4

LFO Filter Depth
rr = 00H - 7FH : 0 - 2400 [cents]

pp=5

LFO Amplitude Depth
rr = 00H - 7FH : 0 - 100%

> Key-Based Instrument Controllers

Status Data byte Status
F0H 7FH, 7FH, 0AH, 01H, 0nH, kkH, nnH, vvH F7H
Byte Explanation
F0H Exclusive status
7FH ID number (universal realtime message)
7FH Device ID (Broadcast)
0AH Sub ID#1 (Key-Based Instrument Control messages)
01H Sub ID#2 (Controller)

0nH

MIDI Channel (00-0F)

kkH

Key Number

nnH Control Number
vvH Value
F7H EOX (End Of Exclusive)

nn=07H

Level
vv = 00H - 7FH : 00 - 200% (Relative)

nn=0AH

Pan
vv = 00H - 7FH : Left - Right (Absolute)

nn=5BH

Reverb Send
vv = 00H - 7FH : 0 - 127 (Absolute)

nn=5DH

Chorus Send
rr = 00H - 7FH : 0 - 127 (Absolute)

* This parameter affects drum instruments only.

Supplementary material

<Decimal and Hexadecimal table>

In MIDI documentation, data values and addresses/sizes of exclusive messages etc. are expressed as hexadecimal values for each 7 bits.
The following table shows how these correspond to decimal numbers.

Dec. Hex. Dec. Hex. Dec. Hex. Dec. Hex.
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 69 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

* Decimal values such as MIDI channel, bank select, and program change are listed as one (1) greater than the values given in the above table.
* A 7-bit byte can express data in the range of 128 steps. For data where greater precision is required, we must use two or more bytes. For example, two hexadecimal numbers aa bbH expressing two 7-bit bytes would indicate a value of aa x 128 + bb.
* In the case of values which have a (+/-) sign, 00H = -64, 40H = +/-0, and 7FH = +63, so that the decimal expression would be 64 less than the value given in the above chart. In the case of two types, 00 00H = -8192, 40 00H = +/-0, and 7F 7FH = +8191. For example if aa bbH were expressed as decimal, this would be aa bbH - 40 00H = aa x 128 + bb - 64 x 128.
* Data marked "nibbled" is expressed in hexadecimal in 4-bit units. A value expressed as a 2-byte nibble 0a 0bH has the value of a x 16 + b.

<Example 1> What is the decimal expression of 5AH ?
From the preceding table, 5AH = 90

<Example 2> What is the decimal expression of the value 12 34H given as hexadecimal for each 7 bits?
From the preceding table, since 12H = 18 and 34H = 52
18 x 128 + 52 = 2356

<Example 3> What is the decimal expression of the nibbled value 0A 03 09 0D ?
From the preceding table, since 0AH = 10, 03H = 3, 09H = 9, 0DH = 13
((10 x 16 + 3) x 16 + 9) x 16 + 13 = 41885

<Example 4> What is the nibbled expression of the decimal value 1258?
16) 1258
16) 78 ... 10
16) 4 ... 14
0 ... 4
Since from the preceding table, 0 = 00H, 4 = 04H, 14 = 0EH, 10 = 0AH, the answer 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 with MIDI CH = 3, note number 62 (note name is 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 with MIDI CH = 15, program number 74 (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 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

If the Pitch Bend Sensitivity is set to 2 semitones, -8192 (00 00H) will cause the pitch to change -200 cents, so in this case -200 x (-3072) / (-8192) = -75 cents of Pitch Bend is being applied to MIDI channel 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. 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). (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 <Example 4>. This is because if 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

<About tuning>

In MIDI, individual Parts are tuned by sending RPN #1 (Master Fine Tuning) to the appropriate MIDI channel.
In MIDI, an entire device is tuned by either sending RPN #1 to all MIDI channels being used, or by sending a System Exclusive MASTER FINE TUNE.
RPN #1 allows tuning to be specified in steps of approximately 0.012 cents (to be precise, 100/8192 cent).
The values of RPN #1 and System Exclusive MASTER FINE TUNE are added together to determine the actual pitch sounded by each Part.

Frequently used tuning values are given in the following table for your reference. Values are in hexadecimal (decimal in parentheses).

Hz in A4 cent RPN #1
445.0 +19.56 4C 43 (+1603)
444.0 +15.67 4A 03 (+1283)
443.0 +11.76 47 44 (+964)
442.0 + 7.85 45 03 (+643)
441.0 + 3.93 42 42 (+322)
440.0 0.00 40 00 (0)
439.0 - 3.94 3D 3D (-323)
438.0 - 7.89 3A 7A (-646)

<Example> Set the tuning of MIDI channel 3 to A4 = 442.0 Hz
Send RPN#1 to MIDI channel 3. From the above table, the value is 45 03H.

B2 64 00 MIDI ch.3, lower byte of RPN parameter number: 00H
(B2)65 01 (MIDI ch.3) upper byte of RPN parameter number: 01H
(B2)06 45 (MIDI ch.3) upper byte of parameter value: 45H
(B2)26 03 (MIDI ch.3) lower byte of parameter value: 03H
(B2)64 7F (MIDI ch.3) lower byte of RPN parameter number: 7FH
(B2)65 7F (MIDI ch.3) upper byte of RPN parameter number: 7FH