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)
- *️⃣ — 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)
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 |
❌ | ❌ | ✅[8] | On XG, relative adjustment of filter resonance (64 is zero change).[8] Not supported on GS, but there is an NRPN. (TODO: Some later Sound Canvas models respond to this also. Which?) |
72 | Sound Controller 3 or Release Time |
❌ | ❌ | ✅[8] | On XG, relative adjustment of envelope release time (64 is zero change).[8] Not supported on GS, but there is an NRPN. (TODO: Some later Sound Canvas models respond to this also. Which?) |
73 | Sound Controller 4 or Attack Time |
❌ | ❌ | ✅[8] | On XG, relative adjustment of envelope attack time (64 is zero change).[8] Not supported on GS, but there is an NRPN. (TODO: Some later Sound Canvas models respond to this also. Which?) |
74 | Sound Controller 5 or Brightness |
❌ | ❌ | ✅[9] | On XG, relative adjustment of filter cutoff (64 is zero change).[9] Not supported on GS, but there is an NRPN. (TODO: Some later Sound Canvas models respond to this also. Which?) |
84 | Portamento Control | ❌ | ✅[6] | ✅[9] | Value is MIDI note number.[6] On XG, ignores Portamento Time (always 0).[9] |
91 | Effect 1 depth or Reverb send[6] |
❌ | ✅[6] | ✅[9] | On GS and XG: Reverb send level[9][6] |
93 | Effect 3 depth or Chorus send[6] |
❌ | ✅[6] | ✅[9] | On GS and XG: Chorus send level[9][6] |
94 | Effect 4 depth or Variation send or Delay send[10] |
❌ | [88][10] | ✅[9] | On XG: Variation send level.[9] XGLite does not require variation effects to be supported.[11] Not supported on GS/SC-55, but SC-88 and onwards use this for Delay Send Level.[10] |
96 | Data increment | ❌ | ❌ | *️⃣[12] | (Used for RPNs and NRPNs) (TODO: check this) |
97 | Data decrement | ❌ | ❌ | *️⃣[12] | (Used for RPNs and NRPNs) (TODO: check this) |
98 | NRPN LSB | ❌ | *️⃣[6] | *️⃣[12] | (Used for NRPNs) |
99 | NRPN MSB | ❌ | *️⃣[6] | *️⃣[12] | (Used for NRPNs) |
100 | RPN LSB | *️⃣ | *️⃣[13] | *️⃣[14] | (Used for RPNs) |
101 | RPN MSB | *️⃣ | *️⃣[13] | *️⃣[14] | (Used for RPNs) |
RPN MSB |
RPN LSB |
RPN name | |||
---|---|---|---|---|---|
0 | 0 | Pitch Bend Sensitivity | ✅[3] | ✅[13] | ✅[15] |
0 | 1 | Fine Tuning | ✅[3] | ✅[13] | ✅[15] |
0 | 2 | Coarse Tuning | ✅[3] | ✅[13] | ✅[15] |
(TODO: add non-GS XG NRPNs)
NRPN MSB |
NRPN LSB |
NRPN name | Notes | |||
---|---|---|---|---|---|---|
1 | 8 | Vibrato Rate[12] | ❌ | ✅[6] | ✅[12] | Relative adjustment (64 is zero change) |
1 | 9 | Vibrato Depth[12] | ❌ | ✅[6] | ✅[12] | Relative adjustment (64 is zero change) |
1 | 10 | Vibrato Delay[12] | ❌ | ✅[6] | ✅[12] | Relative adjustment (64 is zero change) |
1 | 32 | Filter Cutoff Frequency[12] or TVF cutoff frequency[6] |
❌ | ✅[6] | ✅[12] | Relative adjustment (64 is zero change) |
1 | 33 | Filter Resonance[12] or TVF resonance[6] |
❌ | ✅[6] | ✅[12] | Relative adjustment (64 is zero change) |
1 | 99 | EG Attack Time[12] or TVF&TVA Env. Attack time[6] |
❌ | ✅[6] | ✅[12] | Relative adjustment (64 is zero change) |
1 | 100 | EG Decay Time[12] or TVF&TVA Env. Decay time[6] |
❌ | ✅[6] | ✅[12] | Relative adjustment (64 is zero change) |
1 | 102 | EG Release[16] or TVF&TVA Env. Release time[6] |
❌ | ✅[6] | ✅[16] | Relative adjustment (64 is zero change) |
24 | (key #) | Drum Pitch Coarse[14] or Pitch coarse of drum instrument[6] |
❌ | ✅[6] | ✅[14] | Relative adjustment (64 is zero change) |
26 | (key #) | Drum Level[14] or TVA level of drum instrument[6] |
❌ | ✅[6] | ✅[14] | |
28 | (key #) | Drum Pan[14] or Panpot of drum instrument[6] |
❌ | ✅[6] | ✅[14] | |
29 | (key #) | Drum Reverb Send[14] or Reverb send level of drum instrument[6] |
❌ | ✅[6] | ✅[14] | |
30 | (key #) | Drum Chorus Send[14] or Chorus send level of drum instrument[6] |
❌ | ✅[6] | ✅[14] | |
31 | (key #) | Drum Variation Send[14] or Delay send level of drum instrument[10] |
❌ | [88][10] | ✅[14] | On XG: Variation send level.[9] Not supported on GS/SC-55, but SC-88 and onwards use this for Delay Send Level.[10] |
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 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.00 9.01 9.02 9.03 9.04 9.05 9.06 9.07 9.08 9.09 9.10 Yamaha XG Specifications, v 2.00, page 21
- ↑ 10.0 10.1 10.2 10.3 10.4 10.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).
- ↑ 12.00 12.01 12.02 12.03 12.04 12.05 12.06 12.07 12.08 12.09 12.10 12.11 12.12 12.13 12.14 12.15 12.16 12.17 Yamaha XG Specifications, v 2.00, page 22
- ↑ 13.0 13.1 13.2 13.3 13.4 Roland SC-55mkII Owner's Manual, page 92.
- ↑ 14.00 14.01 14.02 14.03 14.04 14.05 14.06 14.07 14.08 14.09 14.10 14.11 14.12 14.13 Yamaha XG Specifications, v 2.00, page 23
- ↑ 15.0 15.1 15.2 Yamaha XG Specifications, v 2.00, page 24
- ↑ 16.0 16.1 Yamaha XG Specifications, v 1.32, page 13 (omitted in v 2.00; by mistake maybe?)