GM–GS–XG quick reference
This is a help page listing which MIDI messages can be used for common things across General MIDI, Roland GS and Yamaha XG.
General notes:
- GS doesn't seem to have a publicly available formal standard, so the Roland SC-55mkII manual is used as a reference. Later Roland devices seem to use the SC-55mkII as the baseline for GS.
- Microsoft GS Wavetable Synth only supports a tiny fraction of the GS features, despite the name.
- XGLite only supports a subset of the XG features.
Symbol legend:
- ❌ — Not supported (according to the standard; the device might still have it as an extension)
- 👻 — Undocumented, but appears to work on some devices in testing
- ⚠️ — Supported, but not useful
- *️⃣ — Supported, but meaning is standard-specific or depends on other factors
- ✅ — Supported
- [88] — Supported only by Roland SC-88 and later (not part of basic GS/SC-55)
Control Change messages
Ctrl # | Controller name | Notes | |||
---|---|---|---|---|---|
0 | Bank Select MSB | ❌ | *️⃣[1] | *️⃣[2] | On GS, this selects variation instruments. On XG, this selects banks. Common numbers: |
1 | Modulation | ✅[3] | ✅[1] | ✅[4] | On GS and XG, this is Vibrato by default[1][4] |
5 | Portamento time | ❌ | ✅[1] | ✅[5] | Value 0 is shortest/fastest.[1][5] On XG, it is cent-linear.[5] |
6 | Data entry MSB | *️⃣ | *️⃣[1] | *️⃣[5] | (Used for RPNs and NRPNs) |
7 | Volume | ✅[3] | ✅[1] | ✅[5] | |
10 | Pan | ✅[3] | ✅[1] | ✅[5] | |
11 | Expression | ✅[3] | ✅[1] | ✅[5] | On GS, this is multiplied with Volume to control overall volume.[1] |
32 | Bank Select LSB | ❌ | ❌[1] | ✅[2] | On GS/the SC-55, this does nothing. But the SC-88 onwards use this to select maps:
On XG, this selects extension instruments.[2] |
38 | Data entry LSB | *️⃣ | *️⃣[1] | *️⃣[5] | (Used for RPNs and NRPNs) |
64 | Sustain or Hold1[6] |
✅[3] | ✅[6] | ✅[7] | 0–63 = Off, 64–127 = On.[6][7] |
65 | Portamento | ❌ | ✅[6] | ✅[7] | 0–63 = Off, 64–127 = On.[6][7] |
66 | Sostenuto | ❌ | ✅[6] | ✅[7] | 0–63 = Off, 64–127 = On.[6][7] |
67 | Soft or Soft Pedal[8] |
❌ | ✅[6] | ✅[8] | |
71 | Sound Controller 2 or Harmonic Content |
❌ | 👻[9] | ✅[8] | On XG, relative adjustment of filter resonance (64 is zero change).[8] On GS, there is no documented support for it, but there is an NRPN. SC modules from at least the SC-88VL onwards appear to respond to it anyway and behave like XG.[9] |
72 | Sound Controller 3 or Release Time |
❌ | 👻[9] | ✅[8] | On XG, relative adjustment of envelope release time (64 is zero change).[8] On GS, there is no documented support for it, but there is an NRPN. SC modules from at least the SC-88VL onwards appear to respond to it anyway and behave like XG.[9] |
73 | Sound Controller 4 or Attack Time |
❌ | 👻[9] | ✅[8] | On XG, relative adjustment of envelope attack time (64 is zero change).[8] On GS, there is no documented support for it, but there is an NRPN. SC modules from at least the SC-88VL onwards appear to respond to it anyway and behave like XG.[9] |
74 | Sound Controller 5 or Brightness |
❌ | 👻[9] | ✅[10] | On XG, relative adjustment of filter cutoff (64 is zero change).[10] On GS, there is no documented support for it, but there is an NRPN. SC modules from at least the SC-88VL onwards appear to respond to it anyway and behave like XG.[9] |
84 | Portamento Control | ❌ | ✅[6] | ✅[10] | Value is MIDI note number.[6] On XG, ignores Portamento Time (always 0).[10] |
91 | Effect 1 depth or Reverb send[6] |
❌ | ✅[6] | ✅[10] | On GS and XG: Reverb send level[10][6] |
93 | Effect 3 depth or Chorus send[6] |
❌ | ✅[6] | ✅[10] | On GS and XG: Chorus send level[10][6] |
94 | Effect 4 depth or Variation send or Delay send[11] |
❌ | [88][11] | ✅[10] | On XG: Variation send level.[10] XGLite does not require variation effects to be supported.[12] Not supported on GS/SC-55, but SC-88 and onwards use this for Delay Send Level.[11] |
96 | Data increment | ❌ | ❌ | *️⃣[13] | (Used for RPNs and NRPNs) (TODO: check this) |
97 | Data decrement | ❌ | ❌ | *️⃣[13] | (Used for RPNs and NRPNs) (TODO: check this) |
98 | NRPN LSB | ❌ | *️⃣[6] | *️⃣[13] | (Used for NRPNs) |
99 | NRPN MSB | ❌ | *️⃣[6] | *️⃣[13] | (Used for NRPNs) |
100 | RPN LSB | *️⃣ | *️⃣[14] | *️⃣[15] | (Used for RPNs) |
101 | RPN MSB | *️⃣ | *️⃣[14] | *️⃣[15] | (Used for RPNs) |
Channel Mode messages | |||||
CC # | Name | Notes | |||
120 | All Sound Off | ❌ | ✅[14] | ✅[16] | Standard but optional MIDI feature, not required by GM. Cuts off currently played sounds on the channel as soon as possible,[17] skipping the "release" part of sounds, unlike All Notes Off.[16] |
121 | Reset All Controllers | ✅[3] | ✅[14] | ✅[16] | (TODO: How does this affect RPNs and NRPNs?) |
123 | All Notes Off | ✅[3] | ✅[14] | ✅[16] | Standard but optional MIDI feature,[18] required by GM. |
124 | Omni Off | ❌ | ⚠️[14] | ⚠️[19] | Standard but optional MIDI feature,[20] not required by GM. "Omni" means each part responds to all channels,[20] which is not appropriate for a GM synth, so changing to/from Omni mode is not possible. The message is treated only as an All Notes Off.[14][19] |
125 | Omni On | ❌ | ⚠️[21] | ⚠️[19] | |
126 | Mono On (Poly Off) | ❌ | ✅[21] | ✅[19] | Standard but optional MIDI feature,[20] not required by GM. On GS and XG, this message sets the part to monophonic mode and performs an All Sound Off.[21][19] GS and XG ignore the value in the message,[21][19] but note that it has a meaning in the MIDI specification! |
127 | Mono Off (Poly On) | ❌ | ✅[21] | ✅[19] | Standard but optional MIDI feature,[20] not required by GM. On GS and XG, this message sets the part to polyphonic mode and performs an All Sound Off.[21][19] GS and XG ignore the value in the message,[21][19] but note that it has a meaning in the MIDI specification! |
RPN messages
RPN MSB |
RPN LSB |
RPN name | |||
---|---|---|---|---|---|
0 | 0 | Pitch Bend Sensitivity | ✅[3] | ✅[14] | ✅[16] |
0 | 1 | Fine Tuning | ✅[3] | ✅[14] | ✅[16] |
0 | 2 | Coarse Tuning | ✅[3] | ✅[14] | ✅[16] |
NRPN messages
(TODO: add non-GS XG NRPNs)
NRPN MSB |
NRPN LSB |
NRPN name | Notes | |||
---|---|---|---|---|---|---|
1 | 8 | Vibrato Rate[13] | ❌ | ✅[6] | ✅[13] | Relative adjustment (64 is zero change) |
1 | 9 | Vibrato Depth[13] | ❌ | ✅[6] | ✅[13] | Relative adjustment (64 is zero change) |
1 | 10 | Vibrato Delay[13] | ❌ | ✅[6] | ✅[13] | Relative adjustment (64 is zero change) |
1 | 32 | Filter Cutoff Frequency[13] or TVF cutoff frequency[6] |
❌ | ✅[6] | ✅[13] | Relative adjustment (64 is zero change) |
1 | 33 | Filter Resonance[13] or TVF resonance[6] |
❌ | ✅[6] | ✅[13] | Relative adjustment (64 is zero change) |
1 | 99 | EG Attack Time[13] or TVF&TVA Env. Attack time[6] |
❌ | ✅[6] | ✅[13] | Relative adjustment (64 is zero change) |
1 | 100 | EG Decay Time[13] or TVF&TVA Env. Decay time[6] |
❌ | ✅[6] | ✅[13] | Relative adjustment (64 is zero change) |
1 | 102 | EG Release[22] or TVF&TVA Env. Release time[6] |
❌ | ✅[6] | ✅[22] | Relative adjustment (64 is zero change) |
24 | (key #) | Drum Pitch Coarse[15] or Pitch coarse of drum instrument[6] |
❌ | ✅[6] | ✅[15] | Relative adjustment (64 is zero change) |
26 | (key #) | Drum Level[15] or TVA level of drum instrument[6] |
❌ | ✅[6] | ✅[15] | |
28 | (key #) | Drum Pan[15] or Panpot of drum instrument[6] |
❌ | ✅[6] | ✅[15] | |
29 | (key #) | Drum Reverb Send[15] or Reverb send level of drum instrument[6] |
❌ | ✅[6] | ✅[15] | |
30 | (key #) | Drum Chorus Send[15] or Chorus send level of drum instrument[6] |
❌ | ✅[6] | ✅[15] | |
31 | (key #) | Drum Variation Send[15] or Delay send level of drum instrument[11] |
❌ | [88][11] | ✅[15] | On XG: Variation send level.[10] Not supported on GS/SC-55, but SC-88 and onwards use this for Delay Send Level.[11] |
System Exclusive messages
System Exclusive (SysEx) messages are required for advanced features like changing effect types, configuring controllers/LFOs, etc. There are a huge number of them and they are completely incompatible between standards, so they are out of scope for this article. The following are only a few essential ones:
References
- ↑ 1.00 1.01 1.02 1.03 1.04 1.05 1.06 1.07 1.08 1.09 1.10 1.11 Roland SC-55mkII Owner's Manual, page 90.
- ↑ 2.0 2.1 2.2 2.3 2.4 2.5 2.6 Yamaha XG Specifications, v 2.00, page 16.
- ↑ 3.0 3.1 3.2 3.3 3.4 3.5 3.6 3.7 3.8 3.9 General MIDI System Level 1 Specification, page 2
- ↑ 4.0 4.1 Yamaha XG Specifications, v 2.00, page 17.
- ↑ 5.0 5.1 5.2 5.3 5.4 5.5 5.6 5.7 Yamaha XG Specifications, v 2.00, page 18.
- ↑ 6.00 6.01 6.02 6.03 6.04 6.05 6.06 6.07 6.08 6.09 6.10 6.11 6.12 6.13 6.14 6.15 6.16 6.17 6.18 6.19 6.20 6.21 6.22 6.23 6.24 6.25 6.26 6.27 6.28 6.29 6.30 6.31 6.32 6.33 6.34 6.35 6.36 6.37 6.38 6.39 6.40 Roland SC-55mkII Owner's Manual, page 91.
- ↑ 7.0 7.1 7.2 7.3 7.4 7.5 Yamaha XG Specifications, v 2.00, page 19.
- ↑ 8.0 8.1 8.2 8.3 8.4 8.5 8.6 8.7 Yamaha XG Specifications, v 2.00, page 20.
- ↑ 9.0 9.1 9.2 9.3 9.4 9.5 9.6 9.7 Tested by the following users:
- hikari_no_yume has tested and found that her SC-88VL responds to controllers 71 to 74 in GS mode.
- purps has tested and found that Roland Sound Canvas VA responds to controllers 71 to 74 in GS mode.
- ↑ 10.00 10.01 10.02 10.03 10.04 10.05 10.06 10.07 10.08 10.09 10.10 Yamaha XG Specifications, v 2.00, page 21
- ↑ 11.0 11.1 11.2 11.3 11.4 11.5 Roland SC-88 Owner's Manual, page 7 - 22.
- ↑ See Yamaha XG Specifications, v 2.00, Attached Chart 1 pages 5 to 7 (all Variation/Insertion effects marked as optional for XGLite).
- ↑ 13.00 13.01 13.02 13.03 13.04 13.05 13.06 13.07 13.08 13.09 13.10 13.11 13.12 13.13 13.14 13.15 13.16 13.17 Yamaha XG Specifications, v 2.00, page 22
- ↑ 14.0 14.1 14.2 14.3 14.4 14.5 14.6 14.7 14.8 14.9 Roland SC-55mkII Owner's Manual, page 92.
- ↑ 15.00 15.01 15.02 15.03 15.04 15.05 15.06 15.07 15.08 15.09 15.10 15.11 15.12 15.13 Yamaha XG Specifications, v 2.00, page 23
- ↑ 16.0 16.1 16.2 16.3 16.4 16.5 16.6 Yamaha XG Specifications, v 2.00, page 24
- ↑ MIDI 1.0 Detailed Specification 4.2.1, page 25.
- ↑ MIDI 1.0 Detailed Specification 4.2.1, page 24.
- ↑ 19.0 19.1 19.2 19.3 19.4 19.5 19.6 19.7 19.8 Yamaha XG Specifications, v 2.00, page 25
- ↑ 20.0 20.1 20.2 20.3 MIDI 1.0 Detailed Specification 4.2.1, page 20.
- ↑ 21.0 21.1 21.2 21.3 21.4 21.5 21.6 Roland SC-55mkII Owner's Manual, page 93.
- ↑ 22.0 22.1 Yamaha XG Specifications, v 1.32, page 13 (omitted in v 2.00; by mistake maybe?)