GM–GS–XG quick reference: Difference between revisions
(add basic GS set of NRPNs) |
(→NRPN messages: explain how combined number is calculated) |
||
(21 intermediate revisions by 2 users not shown) | |||
Line 1: | Line 1: | ||
This is a help page listing which MIDI messages can be used for common things across [[General MIDI]], [[Roland GS]] and [[Yamaha XG]]. | 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/[[Roland SC-55|SC-55]]) | |||
==Control Change messages== | |||
{| class="wikitable" | {| class="wikitable" | ||
! style="width: 1em;" | Ctrl # | ! style="width: 1em;" | Ctrl # | ||
! style="width: 10em;" | Controller name | ! style="width: 10em;" | Controller name | ||
Line 48: | Line 61: | ||
| 67 || Soft<br>''or'' Soft Pedal<ref name=xg-p20></ref> ||❌||✅<ref name=mkii-p91></ref>||✅<ref name=xg-p20>Yamaha XG Specifications, v 2.00, page 20.</ref>|| | | 67 || Soft<br>''or'' Soft Pedal<ref name=xg-p20></ref> ||❌||✅<ref name=mkii-p91></ref>||✅<ref name=xg-p20>Yamaha XG Specifications, v 2.00, page 20.</ref>|| | ||
|- | |- | ||
| 71 || Sound Controller 2<br>''or'' Harmonic Content ||❌|| | | 71 || Sound Controller 2<br>''or'' Harmonic Content ||❌||👻<ref name=88vl-sound-ctrl></ref>||✅<ref name=xg-p20></ref>||On XG, relative adjustment of filter resonance (64 is zero change).<ref name=xg-p20></ref><br>On GS, there is no documented support for it, but there is an NRPN.<br>SC modules from at least the [[Roland SC-88VL|SC-88VL]] onwards appear to respond to it anyway and behave like XG.<ref name=88vl-sound-ctrl>Tested by the following users: | ||
* [[User:hikari_no_yume|hikari_no_yume]] has tested and found that her SC-88VL responds to controllers 71 to 74 in GS mode. | |||
* [[User:purps|purps]] has tested and found that [[Roland Sound Canvas VA]] responds to controllers 71 to 74 in GS mode.</ref> | |||
|- | |- | ||
| 72 || Sound Controller 3<br>''or'' Release Time ||❌|| | | 72 || Sound Controller 3<br>''or'' Release Time ||❌||👻<ref name=88vl-sound-ctrl></ref>||✅<ref name=xg-p20></ref>||On XG, relative adjustment of envelope release time (64 is zero change).<ref name=xg-p20></ref><br>On GS, there is no documented support for it, but there is an NRPN.<br>SC modules from at least the [[Roland SC-88VL|SC-88VL]] onwards appear to respond to it anyway and behave like XG.<ref name=88vl-sound-ctrl></ref> | ||
|- | |- | ||
| 73 || Sound Controller 4<br>''or'' Attack Time ||❌|| | | 73 || Sound Controller 4<br>''or'' Attack Time ||❌||👻<ref name=88vl-sound-ctrl></ref>||✅<ref name=xg-p20></ref>||On XG, relative adjustment of envelope attack time (64 is zero change).<ref name=xg-p20></ref><br>On GS, there is no documented support for it, but there is an NRPN.<br>SC modules from at least the [[Roland SC-88VL|SC-88VL]] onwards appear to respond to it anyway and behave like XG.<ref name=88vl-sound-ctrl></ref> | ||
|- | |- | ||
| 74 || Sound Controller 5<br>''or'' Brightness ||❌|| | | 74 || Sound Controller 5<br>''or'' Brightness ||❌||👻<ref name=88vl-sound-ctrl></ref>||✅<ref name=xg-p21>Yamaha XG Specifications, v 2.00, page 21</ref>||On XG, relative adjustment of filter cutoff (64 is zero change).<ref name=xg-p21></ref><br>On GS, there is no documented support for it, but there is an NRPN.<br>SC modules from at least the [[Roland SC-88VL|SC-88VL]] onwards appear to respond to it anyway and behave like XG.<ref name=88vl-sound-ctrl></ref> | ||
|- | |- | ||
| 84 || Portamento Control ||❌||✅<ref name=mkii-p91></ref>||✅<ref name=xg-p21></ref>||Value is MIDI note number.<ref name=mkii-p91></ref> On XG, ignores Portamento Time (always 0).<ref name=xg-p21></ref> | | 84 || Portamento Control ||❌||✅<ref name=mkii-p91></ref>||✅<ref name=xg-p21></ref>||Value is MIDI note number.<ref name=mkii-p91></ref> On XG, ignores Portamento Time (always 0).<ref name=xg-p21></ref> | ||
Line 62: | Line 77: | ||
| 93 || Effect 3 depth<br>''or'' Chorus send<ref name=mkii-p91></ref> ||❌||✅<ref name=mkii-p91></ref>||✅<ref name=xg-p21></ref>||On GS and XG: Chorus send level<ref name=xg-p21></ref><ref name=mkii-p91></ref> | | 93 || Effect 3 depth<br>''or'' Chorus send<ref name=mkii-p91></ref> ||❌||✅<ref name=mkii-p91></ref>||✅<ref name=xg-p21></ref>||On GS and XG: Chorus send level<ref name=xg-p21></ref><ref name=mkii-p91></ref> | ||
|- | |- | ||
| 94 || Effect 4 depth<br>''or'' Variation send ||❌|| | | 94 || Effect 4 depth<br>''or'' Variation send<br>''or'' Delay send<ref name=88-p7-22>Roland SC-88 Owner's Manual, page 7 - 22.</ref>||❌||[88]<ref name=88-p7-22></ref>||✅<ref name=xg-p21></ref>||On XG: Variation send level.<ref name=xg-p21></ref><br>XGLite does not require variation effects to be supported.<ref name=xglite-variation-fx>See Yamaha XG Specifications, v 2.00, Attached Chart 1 pages 5 to 7 (all Variation/Insertion effects marked as optional for XGLite).</ref><br>Not supported on GS/SC-55, but SC-88 and onwards use this for Delay Send Level.<ref name=88-p7-22></ref> | ||
|- style="background: lightgrey" | |- style="background: lightgrey" | ||
| ''96'' || ''Data increment'' ||❌||❌||*️⃣<ref name=xg-p22>Yamaha XG Specifications, v 2.00, page 22</ref>|| ''(Used for RPNs and NRPNs)'' (TODO: check this) | | ''96'' || ''Data increment'' ||❌||❌||*️⃣<ref name=xg-p22>Yamaha XG Specifications, v 2.00, page 22</ref>|| ''(Used for RPNs and NRPNs)'' (TODO: check this) | ||
Line 75: | Line 90: | ||
|- style="background: lightgrey" | |- style="background: lightgrey" | ||
| ''101'' || ''RPN MSB'' ||*️⃣||*️⃣<ref name=mkii-p92></ref>||*️⃣<ref name=xg-p23></ref>|| ''(Used for RPNs)'' | | ''101'' || ''RPN MSB'' ||*️⃣||*️⃣<ref name=mkii-p92></ref>||*️⃣<ref name=xg-p23></ref>|| ''(Used for RPNs)'' | ||
|- | |||
! colspan=6 | ''Channel Mode messages'' | |||
|- | |||
! style="width: 1em;" | CC # | |||
! style="width: 10em;" | Name | |||
! style="background: white; | [[File:General MIDI logo.png|50px|General MIDI]] | |||
! style="background: white; | [[File:Roland GS logo.png|50px|Roland GS]] | |||
! style="background: white; | [[File:Yamaha XG logo.png|50px|Yamaha XG]] | |||
! Notes | |||
|- | |||
| 120 || All Sound Off || ❌||✅<ref name=mkii-p92></ref>||✅<ref name=xg-p24></ref>|| Standard but optional MIDI feature, not required by GM. Cuts off currently played sounds on the channel as soon as possible,<ref>MIDI 1.0 Detailed Specification 4.2.1, page 25.</ref> skipping the "release" part of sounds, unlike All Notes Off.<ref name=xg-p24></ref> | |||
|- | |||
| 121 || Reset All Controllers || ✅<ref name=gm1-p2></ref>||✅<ref name=mkii-p92></ref>||✅<ref name=xg-p24></ref>||(TODO: How does this affect RPNs and NRPNs?) | |||
|- | |||
| 123 || All Notes Off || ✅<ref name=gm1-p2></ref>||✅<ref name=mkii-p92></ref>||✅<ref name=xg-p24></ref>|| Standard but optional MIDI feature,<ref>MIDI 1.0 Detailed Specification 4.2.1, page 24.</ref> required by GM. This behaves like sending a "Note Off" (i.e. releasing) for all currently held keys; the release may be delayed by a sustain. (TODO: cite this bit) | |||
|- | |||
| 124 || Omni Off || ❌||⚠️<ref name=mkii-p92></ref>||⚠️<ref name=xg-p25>Yamaha XG Specifications, v 2.00, page 25</ref>|| rowspan=2 | Standard but optional MIDI feature,<ref name=midi-modes>MIDI 1.0 Detailed Specification 4.2.1, page 20.</ref> not required by GM. "Omni" means each part responds to all channels,<ref name=midi-modes></ref> 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.<ref name=mkii-p92></ref><ref name=xg-p25></ref> | |||
|- | |||
| 125 || Omni On || ❌||⚠️<ref name=mkii-p93>Roland SC-55mkII Owner's Manual, page 93.</ref>||⚠️<ref name=xg-p25></ref> | |||
|- | |||
| 126 || Mono On (Poly Off) || ❌||✅<ref name=mkii-p93></ref>||✅<ref name=xg-p25></ref>|| Standard but optional MIDI feature,<ref name=midi-modes>MIDI 1.0 Detailed Specification 4.2.1, page 20.</ref> not required by GM. On GS and XG, this message sets the part to monophonic mode and performs an All Sound Off.<ref name=mkii-p93></ref><ref name=xg-p25></ref> GS and XG ignore the value in the message,<ref name=mkii-p93></ref><ref name=xg-p25></ref> but note that it has a meaning in the MIDI specification! | |||
|- | |||
| 127 || Mono Off (Poly On) || ❌||✅<ref name=mkii-p93></ref>||✅<ref name=xg-p25></ref>|| Standard but optional MIDI feature,<ref name=midi-modes>MIDI 1.0 Detailed Specification 4.2.1, page 20.</ref> not required by GM. On GS and XG, this message sets the part to polyphonic mode and performs an All Sound Off.<ref name=mkii-p93></ref><ref name=xg-p25></ref> GS and XG ignore the value in the message,<ref name=mkii-p93></ref><ref name=xg-p25></ref> but note that it has a meaning in the MIDI specification! | |||
|} | |} | ||
==RPN messages== | |||
{| class="wikitable" | {| class="wikitable" | ||
! RPN<br>MSB | ! RPN<br>MSB | ||
! RPN<br>LSB | ! RPN<br>LSB | ||
! (combined) | |||
! RPN name | ! RPN name | ||
! style="background: white; | [[File:General MIDI logo.png|50px|General MIDI]] | ! style="background: white; | [[File:General MIDI logo.png|50px|General MIDI]] | ||
Line 93: | Line 132: | ||
|} | |} | ||
For software that needs a single number for an RPN rather than a separate MSB and LSB, you can just use the LSB. | |||
==NRPN messages== | |||
(TODO: add non-GS XG NRPNs) | (TODO: add non-GS XG NRPNs) | ||
If you are using software that only asks for a single number when setting an NRPN, e.g. FL Studio, use the "(combined)" number (calculated as MSB × 128 + LSB). Otherwise, specify the MSB and LSB separately. | |||
Some NRPNs are for adjusting the sounds of individual drum instruments on a drum part/channel (e.g. channel 10 in General MIDI). To select the right NRPN, you need to know the key number corresponding to the instrument you want to edit. For example, Bass Drum 1 is assigned to the C key in octave 2 ("C2") in General MIDI, and C2 has MIDI note/key number 36. [[General MIDI#Percussion Map]] may be a useful reference for some common drum instruments. | |||
{| class="wikitable" | {| class="wikitable" | ||
! NRPN<br>MSB | ! NRPN<br>MSB | ||
! NRPN<br>LSB | ! NRPN<br>LSB | ||
! (combined) | |||
! NRPN name | ! NRPN name | ||
! style="background: white; | [[File:General MIDI logo.png|50px|General MIDI]] | ! style="background: white; | [[File:General MIDI logo.png|50px|General MIDI]] | ||
Line 104: | Line 151: | ||
! Notes | ! Notes | ||
|- | |- | ||
| 1 || 8 || Vibrato Rate<ref name=xg-p22></ref> || ❌ || ✅<ref name=mkii-p91></ref> || ✅<ref name=xg-p22></ref> || Relative adjustment (64 is zero change) | | 1 || 8 || 136 || Vibrato Rate<ref name=xg-p22></ref> || ❌ || ✅<ref name=mkii-p91></ref> || ✅<ref name=xg-p22></ref> || Relative adjustment (64 is zero change) | ||
|- | |- | ||
| 1 || 9 || Vibrato Depth<ref name=xg-p22></ref> || ❌ || ✅<ref name=mkii-p91></ref> || ✅<ref name=xg-p22></ref> || Relative adjustment (64 is zero change) | | 1 || 9 || 137 || Vibrato Depth<ref name=xg-p22></ref> || ❌ || ✅<ref name=mkii-p91></ref> || ✅<ref name=xg-p22></ref> || Relative adjustment (64 is zero change) | ||
|- | |- | ||
| 1 || 10 || Vibrato Delay<ref name=xg-p22></ref> || ❌ || ✅<ref name=mkii-p91></ref> || ✅<ref name=xg-p22></ref> || Relative adjustment (64 is zero change) | | 1 || 10 || 138 || Vibrato Delay<ref name=xg-p22></ref> || ❌ || ✅<ref name=mkii-p91></ref> || ✅<ref name=xg-p22></ref> || Relative adjustment (64 is zero change) | ||
|- | |- | ||
| 1 || 32 || Filter Cutoff Frequency<ref name=xg-p22></ref><br>''or'' TVF cutoff frequency<ref name=mkii-p91></ref> || ❌ || ✅<ref name=mkii-p91></ref> || ✅<ref name=xg-p22></ref> || Relative adjustment (64 is zero change) | | 1 || 32 || 160 || Filter Cutoff Frequency<ref name=xg-p22></ref><br>''or'' TVF cutoff frequency<ref name=mkii-p91></ref> || ❌ || ✅<ref name=mkii-p91></ref> || ✅<ref name=xg-p22></ref> || Relative adjustment (64 is zero change) | ||
|- | |- | ||
| 1 || 33 || Filter Resonance<ref name=xg-p22></ref><br>''or'' TVF resonance<ref name=mkii-p91></ref> || ❌ || ✅<ref name=mkii-p91></ref> || ✅<ref name=xg-p22></ref> || Relative adjustment (64 is zero change) | | 1 || 33 || 161 || Filter Resonance<ref name=xg-p22></ref><br>''or'' TVF resonance<ref name=mkii-p91></ref> || ❌ || ✅<ref name=mkii-p91></ref> || ✅<ref name=xg-p22></ref> || Relative adjustment (64 is zero change) | ||
|- | |- | ||
| 1 || 99 || EG Attack Time<ref name=xg-p22></ref><br>''or'' TVF&TVA Env. Attack time<ref name=mkii-p91></ref> || ❌ || ✅<ref name=mkii-p91></ref> || ✅<ref name=xg-p22></ref> || Relative adjustment (64 is zero change) | | 1 || 99 || 227 || EG Attack Time<ref name=xg-p22></ref><br>''or'' TVF&TVA Env. Attack time<ref name=mkii-p91></ref> || ❌ || ✅<ref name=mkii-p91></ref> || ✅<ref name=xg-p22></ref> || Relative adjustment (64 is zero change) | ||
|- | |- | ||
| 1 || 100 || EG Decay Time<ref name=xg-p22></ref><br>''or'' TVF&TVA Env. Decay time<ref name=mkii-p91></ref> || ❌ || ✅<ref name=mkii-p91></ref> || ✅<ref name=xg-p22></ref> || Relative adjustment (64 is zero change) | | 1 || 100 || 228 || EG Decay Time<ref name=xg-p22></ref><br>''or'' TVF&TVA Env. Decay time<ref name=mkii-p91></ref> || ❌ || ✅<ref name=mkii-p91></ref> || ✅<ref name=xg-p22></ref> || Relative adjustment (64 is zero change) | ||
|- | |- | ||
| 1 || 102 || TVF&TVA Env. Release time<ref name=mkii-p91></ref> || ❌ || | | 1 || 102 || 230 || EG Release<ref name=xg-1.32-p13>Yamaha XG Specifications, v 1.32, page 13 (omitted in v 2.00; by mistake maybe?)</ref><br>''or'' TVF&TVA Env. Release time<ref name=mkii-p91></ref> || ❌ || ✅<ref name=mkii-p91></ref> || ✅<ref name=xg-1.32-p13></ref> || Relative adjustment (64 is zero change) | ||
|- | |- | ||
| 24 || | | 24 || key # || 3072<br>+ key #|| Drum Pitch Coarse<ref name=xg-p23></ref><br>''or'' Pitch coarse of drum instrument<ref name=mkii-p91></ref> || ❌ || ✅<ref name=mkii-p91></ref> || ✅<ref name=xg-p23></ref> || Relative adjustment (64 is zero change) | ||
|- | |- | ||
| 26 || | | 26 || key # || 3328<br>+ key # || Drum Level<ref name=xg-p23></ref><br>''or'' TVA level of drum instrument<ref name=mkii-p91></ref> || ❌ || ✅<ref name=mkii-p91></ref> || ✅<ref name=xg-p23></ref> || | ||
|- | |- | ||
| 28 || | | 28 || key # || 3548<br>+ key # || Drum Pan<ref name=xg-p23></ref><br>''or'' Panpot of drum instrument<ref name=mkii-p91></ref> || ❌ || ✅<ref name=mkii-p91></ref> || ✅<ref name=xg-p23></ref> || 0 is a special value that applies random panning to each triggered note | ||
|- | |- | ||
| 29 || | | 29 || key # || 3712<br>+ key # || Drum Reverb Send<ref name=xg-p23></ref><br>''or'' Reverb send level of drum instrument<ref name=mkii-p91></ref> || ❌ || ✅<ref name=mkii-p91></ref> || ✅<ref name=xg-p23></ref> || | ||
|- | |- | ||
| 30 || | | 30 || key # || 3840<br>+ key # || Drum Chorus Send<ref name=xg-p23></ref><br>''or'' Chorus send level of drum instrument<ref name=mkii-p91></ref> || ❌ || ✅<ref name=mkii-p91></ref> || ✅<ref name=xg-p23></ref> || | ||
|- | |||
| 31 || key # || 3968<br>+ key # || Drum Variation Send<ref name=xg-p23></ref><br>''or'' Delay send level of drum instrument<ref name=88-p7-22></ref> || ❌ || [88]<ref name=88-p7-22></ref> || ✅<ref name=xg-p23></ref> || On XG: Variation send level.<ref name=xg-p21></ref><br>Not supported on GS/SC-55, but SC-88 and onwards use this for Delay Send Level.<ref name=88-p7-22></ref> | |||
|} | |} | ||
==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: | |||
{| class="wikitable" | |||
! SysEx (hex) | |||
! Name | |||
! style="background: white; | [[File:General MIDI logo.png|50px|General MIDI]] | |||
! style="background: white; | [[File:Roland GS logo.png|50px|Roland GS]] | |||
! style="background: white; | [[File:Yamaha XG logo.png|50px|Yamaha XG]] | |||
! Notes | |||
|- | |||
| <tt>F0 7E 7F 09 01 F7</tt> || General MIDI Level 1 System On || ✅ || ✅ || ✅ || Sets module to GM1 mode and resets settings for all parts. Broadcast message addressed to all devices.<br>Note: some early GS devices (early SC-55 models) don't support GM and won't respond to this.<br> | |||
|- | |||
| <tt>F0 41 10 42 12 40 00 7F 00 41 F7</tt> || GS Reset || ❌ || ✅ || ❌ || Sets module to GS mode and resets settings for all parts. Addressed to device 17 (default device number). | |||
|- | |||
| <tt>F0 43 10 4C 00 00 7E 00 F7</tt> || XG System On || ❌ || ❌ || ✅ || Sets module to XG mode and resets settings for all parts. Addressed to device 1 (default device number). | |||
|- | |||
| <tt>F0 41 10 42 12 40 1A 15 02 0F F7</tt> || GS: Patch parameters, Part 11 § USE FOR RHYTHM PART → MAP2 || ❌ || ✅ || ❌ || Sets part 11 (mapped to channel 11) to drums mode, using the 2nd set of drum parameters. Addressed to device 17 (default device number).<br>For XG, you can use a Bank Select MSB instead (see above). | |||
|} | |||
== References == | == References == |
Latest revision as of 00:51, 30 September 2024
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. This behaves like sending a "Note Off" (i.e. releasing) for all currently held keys; the release may be delayed by a sustain. (TODO: cite this bit) |
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 |
(combined) | RPN name | |||
---|---|---|---|---|---|---|
0 | 0 | Pitch Bend Sensitivity | ✅[3] | ✅[14] | ✅[16] | |
0 | 1 | Fine Tuning | ✅[3] | ✅[14] | ✅[16] | |
0 | 2 | Coarse Tuning | ✅[3] | ✅[14] | ✅[16] |
For software that needs a single number for an RPN rather than a separate MSB and LSB, you can just use the LSB.
NRPN messages
(TODO: add non-GS XG NRPNs)
If you are using software that only asks for a single number when setting an NRPN, e.g. FL Studio, use the "(combined)" number (calculated as MSB × 128 + LSB). Otherwise, specify the MSB and LSB separately.
Some NRPNs are for adjusting the sounds of individual drum instruments on a drum part/channel (e.g. channel 10 in General MIDI). To select the right NRPN, you need to know the key number corresponding to the instrument you want to edit. For example, Bass Drum 1 is assigned to the C key in octave 2 ("C2") in General MIDI, and C2 has MIDI note/key number 36. General MIDI#Percussion Map may be a useful reference for some common drum instruments.
NRPN MSB |
NRPN LSB |
(combined) | NRPN name | Notes | |||
---|---|---|---|---|---|---|---|
1 | 8 | 136 | Vibrato Rate[13] | ❌ | ✅[6] | ✅[13] | Relative adjustment (64 is zero change) |
1 | 9 | 137 | Vibrato Depth[13] | ❌ | ✅[6] | ✅[13] | Relative adjustment (64 is zero change) |
1 | 10 | 138 | Vibrato Delay[13] | ❌ | ✅[6] | ✅[13] | Relative adjustment (64 is zero change) |
1 | 32 | 160 | Filter Cutoff Frequency[13] or TVF cutoff frequency[6] |
❌ | ✅[6] | ✅[13] | Relative adjustment (64 is zero change) |
1 | 33 | 161 | Filter Resonance[13] or TVF resonance[6] |
❌ | ✅[6] | ✅[13] | Relative adjustment (64 is zero change) |
1 | 99 | 227 | EG Attack Time[13] or TVF&TVA Env. Attack time[6] |
❌ | ✅[6] | ✅[13] | Relative adjustment (64 is zero change) |
1 | 100 | 228 | EG Decay Time[13] or TVF&TVA Env. Decay time[6] |
❌ | ✅[6] | ✅[13] | Relative adjustment (64 is zero change) |
1 | 102 | 230 | EG Release[22] or TVF&TVA Env. Release time[6] |
❌ | ✅[6] | ✅[22] | Relative adjustment (64 is zero change) |
24 | key # | 3072 + key # |
Drum Pitch Coarse[15] or Pitch coarse of drum instrument[6] |
❌ | ✅[6] | ✅[15] | Relative adjustment (64 is zero change) |
26 | key # | 3328 + key # |
Drum Level[15] or TVA level of drum instrument[6] |
❌ | ✅[6] | ✅[15] | |
28 | key # | 3548 + key # |
Drum Pan[15] or Panpot of drum instrument[6] |
❌ | ✅[6] | ✅[15] | 0 is a special value that applies random panning to each triggered note |
29 | key # | 3712 + key # |
Drum Reverb Send[15] or Reverb send level of drum instrument[6] |
❌ | ✅[6] | ✅[15] | |
30 | key # | 3840 + key # |
Drum Chorus Send[15] or Chorus send level of drum instrument[6] |
❌ | ✅[6] | ✅[15] | |
31 | key # | 3968 + 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?)