Article History
36% now_its_dark
xg (format)

Yamaha XG


Point Type:
File Types:
Max Filesize:
Yamaha XG (eXtended General MIDI) is a set of proprietary extensions to the GM MIDI protocol standard, introduced in 1994.
  1. I have never done this format
  2. What can I do with XG over MSGS?
  3. Restrictions on submit
  4. CC Controllers
  5. Effects
  6. SysEx Messages
  7. Tools for creation
  8. Tools for playback
  9. Examples of XG music
  10. See also + other links
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. Think of it as proprietary MIDI Plus!

This article is intended to cover XG in the scope of BotB's format, which is restricted to only S-YXG50 or MU-50 due to many XG synths having different/upgraded sounds and features. S-YXG50 is the free and easily available option for XG, so the sounds available to S-YXG50 are the focus of the BotB format. S-YXG50 only supports a single MIDI input port and thus is a 16-part (channel) synth, just like good old MSGS.

XG itself comprises many different physical and software synth implementations, all of which have their own features, effects and soundsets, but most of them would be unsuitable for BotB due to not being free. You can check out a full list of XG-supported hardware units here
and software synths here

I have never done this format

You have some options to make XG MIDIs!

1) use the SYXG50 VST
in your DAW of choice, set up in a similar manner to how you'd set up MSGS MIDI, C700 VST, or MuntVSTi for MT-32; run 16 MIDI Out channels through it.
2) use dedicated software such as Yamaha's XGWorks
(for easiest control over XG-specific effects).
3) use another MIDI sequencer such as Sekaiju
or Domino
; others listed in the Software section below.

What can I do with XG over MSGS?

As mentioned, XG offers many more options for proud MIDI warriors than MSGS MIDI does:

Bank Control: Several variants of each patch are available to use, for a sum total of 480 melodic voices, 9 drumkits and 2 SFX banks! Unlike MSGS, you don't need to use SysEx to access them; instead use CC32 followed by a Program Change event. A full list of available XG patches, and the CC32 value ("Bank LSB") required, can be found here
! CC0 also does some Bank Control for SFX and drums.
>> See the full list of legal XG patches on BotB here.

More effects: Access some wonderful features like Portamento (CC65 off/on, CC5 duration control), Filters (CC71 resonant filter, CC74 lowpass filter), ADSR (CC72 release, CC73 attack), and many more!
>> See the full list of XG CCs below.

Global effects: In addition to coming with global Reverb and Chorus, XG lets you use SysEx messages to control additional effects like Flanger and Distortion (as well as apply changes to any of the global effects). Note that not all DAWs and sequencers support SysEx (*cough* FL Studio *cough*) so you may need to use an additional tool to manipulate this data, such as Bome SendSX
>> Read more about Effects in XG below and SysEx in XG below as well.

Restrictions on submit

BotB entries must only use S-YXG50 (or MU-50)!!! Anything else might support more features than either or just have different sounds and may therefore be illegal.

Submissions - restricted to .mid, naturally - should be playable through either Falcosoft MIDI Player (setup guide here
) or SYXG50 VST itself.

For renders, S-YXG50 is recommended. If you happen to be using MU-50 for this format, keep in mind the following: SYXG50 forces channel 10 to be in drum mode (y'know, like MSGS) unless you use SysEx to deactivate it. The MU-50 doesn't do that, you have to set it up yourself via MSB127 on channel 10. Something to be aware of if you're using a hardware XG device.

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 strength
• 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 parameters 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

Tools for creation

• 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)
XG Manager
XG voice editor and bank manager for Windows.
XG voice editor for Linux / Qtractor.
MIDI Espressivo
XG Voice editor & the probably the only tool to convert bitmap animation frames to "Display:bitmap" sysex. Just grab the data from the "sample.mid" file it saves to.

Tools for playback

S-YXG50 synthesiser VST - unofficial download here
(first link)
Falcosoft MIDI Player (Win)
for hosting the S-YXG50 VST (more advanced than SaviHost)
>> Follow XG-Central's Guide' for setting up the Falcosoft MIDI Player here
Foobar2000 (Win/Linux+WINE)
with the foo_midi plugin

>> Follow Yamaha S-YXG50 VSTi page for setting up the foo_midi component here
This player does not produce sound or send midi to external devices, but rather plays midi data synced to recorded audio for embedding on a web page. It can simulate the LCD of an MU-series module, for viewing of voice states or embedded display:text or display:bitmap data during playback.

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

List of legal XG patches
MIDI patches list
by MelonadeM (lists all available sounds for the XG format in the "S-YXG50" column, and the CC32 value ("LSB") required to get that sound)
MIDI (format)
MT32 (format)
C700 VST (if you are unsure how to set up a VST for MIDI, the C700 guide may help you)
S-YXG50 Data
- XG instrument map layout; in Japanese, but 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.
Video introduction to XG synths by Speedy

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.

Battle Formats