Article History

99% MiDoRi

Yamaha XG


  1. Synthesisers compatible with XG
  2. Instrument Map
  3. CC Controllers
  4. Effects
  5. SysEx Messages
  6. Software
  7. Examples of XG music
  8. External Links
  9. See also
Yamaha's XG (eXtended General MIDI) is a set of proprietary extensions to the GM MIDI protocol standard. Introduced in 1994, it sought to improve on GM's features, by defining more instruments, implementing audio processing effects, and other commands not available in GM-only synths.

It competed with another (incompatible) extension, the GS standard by Roland.

Synthesisers compatible with XG

Here's an partial list (excluding internal sound cards and non MU-series devices) of hardware units which explicitly support XG (indicated by the logo on the front panel):

Yamaha MU synths

In addition to physical synths, Yamaha developed and released several purely software implementations of the standard. These softsynths include:

• S-YXG50 (Windows 98, and later, Windows XP version)
• S-YXG50 VST (released exclusively as a part of Sequence Object Linking 2 software bundle)
• S-YXG100 (combining S-YXG50's features with additional VL physical modeling synth engine)
• Several different ones - see this list for more comprehensive detail

Instrument Map

XG voice count differs between synth models. On lower-end devices some additional banks might be not be present. This article covers software S-YXG50 only. For other models, refer to their instruction manuals.

S-YXG50's instrument map implements minimal required XG set and contains:

• 480 Melodic voices
• 9 Drum Kits + 2 SFX banks (mirroring the normal pitch-mapped SFX voices, except mapped pitchless like a drumkit, one key per sound)

For the layout of the map see either of these 2 documents:
S-YXG50 Data
- Japanese, just the tables, so should be understandable even if you don't know the language.
S-YXG50 Guide
- General guide, published by Yamaha UK, contains instrument table, aside of a more detailed overview.

Use the CC 32 (Bank Least Significant Byte) controller to switch between different banks for any given patch

S-YXG50 only supports a single MIDI input port, thus is a 16-part (channel) synth, just as good old MSGS. You can always run 2 or more instances and feed each of them from a different port to increase the multitimbrality (whether or not this should be allowed on BotB is up to discussion i think).

CC Controllers

CC controllers supported by XG include:

//Both types of Bank Control messages must be followed by a program change message, otherwise they have no effect

• CC 0 - Bank MSByte [Data range: 0:Normal 64:SFX voice 126:SFX kit 127:Drum]
• CC 32 - Bank LSByte (voice variation) [Data range: 0-127]


• CC 1 - Modulation (Initialised to Vibrato Depth by default, different target set with SysEx)
• CC 5 - Portamento duration

//Used to provide the data for (N)RPN parametres to change

• CC 6 - Data Entry MSB
• CC 38 - Data Entry LSB


• CC 7 - Part volume
• CC 10 - Panpot
• CC 11 - Expression (Dynamic control of part's loudness mid-sequence. Use instead of CC 7 for creating short, dynamic volume variations)

• CC 64 - Sustain toggle (<64dec to disable)
• CC 65 - Portamento toggle (<64dec to disable)
• CC 66 - Sostenuto toggle (<64dec to disable)
• CC 67 - Soft Pedal toggle (<64dec to disable)

//This section doubles some of NRPNs in a more accessible form for the most used ADSR controls. It also reduces the MIDI data usage compared to NRPNs, making it a more appropriate choice for real-time manipulation from within the sequence.

• CC 71 - Resonant filter strenght
• CC 72 - ADSR Release
• CC 73 - ADSR Attack
• CC 74 - Low-Pass filter cutoff

• CC 84 - Portamento Control


• CC 91 - FX Reverb Block Send
• CC 93 - FX Chorus Block Send
• CC 94 - FX Variation Block Send (System mode only, doesn't apply to IFX - see below)

NRPN Data Entry Incrementation/Decrementation:
//DATA byte of the midi message will be ignored

• CC 96 - Data Increment
• CC 97 - Data Decrement

NRPN (Non-registered parametre number) select:
//First send the NPRN MSB and LSB to select the control parametre, then set the value by Data Entry. Refer to the specification too see the full NRPN parametres table

• CC 98 - NRPN LSB
• CC 99 - NRPN MSB

RPN (Registered parametre number) select:
//Same procedure as with NRPNs applies

• CC 100 - RPN LSB
• CC 101 - RPN MSB

Channel Mode Messages:

• CC 120 - All Sound OFF {data range: 0) - cuts all sound immediately
• CC 121 - Reset All Controllers {data range: 0)
• CC 123 - All Notes OFF (data range: 0) - releases all notes


XG defines three types of effects that can be used to further shape the sound to your liking:

• [Required] System Effects: These are Reverb and Chorus and are applied to all parts (using the same settings - there's only one slot per each of them and all parts (channels) send to the same System FX block. You can alter the signal send level of each part independently to control the intensity of the effect on a per-channel basis.

• [Required] Variation Effects (VFX) - at least one slot per synth is required by specification. The effect type (i.e. Distortion, Flanger, etc.) and all parametres of VFX are freely configurable by the user through SysEx messages. Unique attribute of VFX is that they can be set to function either as System Effect (see above) or Insert Effect (IFX) - refer to the description of IFX below for details. Default mode for VFX is Insert.

• [Optional] Insert Effects (IFX): These effect blocks are assignable via SysEx messages, ONE effect per SINGLE channel at a time. These are optional in XG, so it's safer to assume that the target synth doesn't implement them, for maximum compatibility unless you're targeting a specific XG device. S-YXG50 used on BotB sadly doesn't support any IFX.

The easiest way to access and edit FX and their settings is to use Yamaha's XG-ready sequencers with visual editors like XGWorks, but you can always control it manually using SysEx messages. Refer to the XG Specification documentation for details (linked at the bottom)

SysEx Messages

You can control most of the synth's parametres by SysEx messages. SysEx DATA always begins with 0xF0 and is terminated with 0xF7. Any synth-specific data goes inbetween.

An example message might look like this:

XG System ON: F0 43 10 4C 00 00 7E 00 F7 [hex] - resets the synth and switches it into XG mode, every XG MIDI file should contain this message at the beginning

Message breakdown:
11110000 F0 Exclusive status
01000011 43 YAMAHA ID
0001nnnn 1n Device Number
01001100 4C Model ID
00000000 00 Address High
00000000 00 Address Mid
01111110 7E Address Low
00000000 00 Data
11110111 F7 End of Exclusive

XG Universal Realtime System Volume: F0 7F 7F 04 01 11 [MM] F7 [hex], where MM is the volume MSB. Useful for master volume fades.

Message breakdown:
11110000 F0 - Exclusive status
01111111 7F - Universal Realtime ID
01111111 7F - Device ID
00000100 04 - Sub ID1
00000001 01 - Sub ID2
0lllllll ll - Master Volume LSB
0mmmmmmm mm - Master Volume MSB
11110111 F7 - End of Exclusive

Consult the specification for more SysEx


Authoring / Sequencers:
• Yamaha XGWorks (you can find it on XG Central

• Yamaha SOL (possible to find on Archive)

• Domino Sequencer English translation

Frieve Music Studio

Bome SendSX
(SysEx scratchpad, useful for quick testing stuff, alternatively MIDIOX
also has such a feature but it's a part of a much more complex routing/monitoring program)

Falcosoft MIDI Player
for hosting the S-YXG50 VST (more advanced than SaviHost)
• S-YXG50 synthesiser - unofficial download here
(first link)
Follow XG-Central's Guide for setting up the Falcosoft MIDI Player here

MIDI routing software - pretty much essential if you want to interface with S-YXG50 outside of a DAW. If you need a solution compatible with Windows XP MIDIYoke
has you covered.

Examples of XG music

So, what can it actually do, and what does it sound like? Here are several examples of XG music, all rendered with S-YXG50

Around 50 minutes of Yamaha's XG demo tracks
(YouTube video)
Pastel Reverie by Wally Chantek

XGroove by Yasutaka Nakata


Cafe Jungle, produced by Yamaha MusicSoft Europe

Cop Out, produced by Yamaha MusicSoft Europe

In case of any of these URLs ever becoming inaccessible, please use the
Yamaha XG official specifications and guides (archived)

S-YXG50 Instruments and MIDI implementation

Video introduction to XG synths by Speedy

See also

MIDI (format)

File Formats