Skip to content

Instantly share code, notes, and snippets.

@Midi-In
Last active January 31, 2022 16:39
Show Gist options
  • Save Midi-In/0d10e3a565900d295259466b0d919ee2 to your computer and use it in GitHub Desktop.
Save Midi-In/0d10e3a565900d295259466b0d919ee2 to your computer and use it in GitHub Desktop.
Yamaha XG - BotB Lyceum
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]
'[t[b2]!! BotB entries must only use S-YXG50 or a MU50!!!! anything else might support more features than either or just have different sounds and may therefore be illegal.'[/t]
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):
• '[l[https://en.wikipedia.org/wiki/Yamaha_MU-series[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 '[l[https://soundprogramming.net/software/yamaha-xg-software-synthesizer/[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:
• '[l[http://geertjalink.nl/downloads/yamaha/manual/SYXG50data.pdf[S-YXG50 Data] - Japanese, just the tables, so should be understandable even if you don't know the language.
• '[l[https://web.archive.org/web/19970616180425/http://www.yamaha.co.uk/download/syxg50/sxg5095.exe[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]
'[t[b1]CC controllers supported by XG include:'[/t]
'[t[b2]BANK CONTROL:'[/t]
'[t[b0]'[o]//Both types of Bank Control messages must be followed by a program change message, otherwise they have no effect'[/o]'[/t]
• 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]
'[t[b2]MODULATION AND PORTAMENTO:'[/t]
• CC 1 - Modulation (Initialised to Vibrato Depth by default, different target set with SysEx)
• CC 5 - Portamento duration
'[t[b2]DATA ENTRY:'[/t]
'[t[b0]'[o]//Used to provide the data for (N)RPN parametres to change'[/o]'[/t]
• CC 6 - Data Entry MSB
• CC 38 - Data Entry LSB
'[t[b2]MISCELLANEOUS:'[/t]
• 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)
'[t[b2]ADSR/FILTER CONTROL:'[/t]
'[t[b0]'[o]//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.'[/o]'[/t]
• CC 71 - Resonant filter strenght
• CC 72 - ADSR Release
• CC 73 - ADSR Attack
• CC 74 - Low-Pass filter cutoff
• CC 84 - Portamento Control
'[t[b2]FX SEND CONTROL:'[/t]
• 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)
'[t[b2]NRPN Data Entry Incrementation/Decrementation:'[/t]
'[t[b0]'[o]//DATA byte of the midi message will be ignored'[/o]'[/t]
• CC 96 - Data Increment
• CC 97 - Data Decrement
'[t[b2]NRPN (Non-registered parametre number) select:'[/t]
'[t[b0]'[o]//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'[/o]'[/t]
• CC 98 - NRPN LSB
• CC 99 - NRPN MSB
'[t[b2]RPN (Registered parametre number) select:'[/t]
'[t[b0]'[o]//Same procedure as with NRPNs applies'[/o]'[/t]
• CC 100 - RPN LSB
• CC 101 - RPN MSB
'[t[b2]Channel Mode Messages:'[/t]
• 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
'[#[Effects]
'[t[b1]XG defines three types of effects that can be used to further shape the sound to your liking:'[/t]
• [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.
'[t[b1]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)'[/t]
'[#[SysEx Messages]
'[t[b1]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.'[/t]
An example message might look like this:
• '[t[mono]XG System ON: F0 43 10 4C 00 00 7E 00 F7 [hex]'[/t] - resets the synth and switches it into XG mode, every XG MIDI file should contain this message at the beginning
'[t[mono]
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
'[/t]
• '[t[mono]XG Universal Realtime System Volume: F0 7F 7F 04 01 11 [MM] F7 [hex]'[/t], where MM is the volume MSB. Useful for master volume fades.
'[t[mono]
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
'[/t]
Consult the specification for more SysEx
'[#[Software]
'[t[b2]Authoring / Sequencers:'[/t]
• Yamaha XGWorks (you can find it on '[l[http://xg-central.com[XG Central]
• Yamaha SOL (possible to find on Archive)
• '[l[https://openmidiproject.osdn.jp/Sekaiju_en.html[Sekaiju]
• Domino Sequencer '[l[https://github.com/Hans5958/Domino-English-Translation[English translation]
• '[l[http://www.frieve.com/english/musicstd/download.html[Frieve Music Studio]
• '[l[https://www.bome.com/products/sendsx[Bome SendSX] (SysEx scratchpad, useful for quick testing stuff, alternatively '[l[http://www.midiox.com/app.htm[MIDIOX] also has such a feature but it's a part of a much more complex routing/monitoring program)
• '[l[https://mountainutilities.eu/xg[XG Manager] XG voice editor and bank manager for Windows.
• '[l[https://qxgedit.sourceforge.io/[QXGEdit] XG voice editor for Linux / Qtractor.
'[t[b2]Playback:'[/t]
• '[l[http://falcosoft.hu/softwares.html#midiplayer[Falcosoft MIDI Player] for hosting the S-YXG50 VST (more advanced than SaviHost)
• S-YXG50 synthesiser - unofficial download '[l[http://veg.by/en/projects/syxg50/[here] (first link)
'[t[b1]Follow XG-Central's Guide for setting up the Falcosoft MIDI Player '[l[http://xg-central.com/playback-xg-midi-files-on-windows.php[here]'[/t]
'[t[b2]Miscellaneous:'[/t]
• '[l[https://www.tobias-erichsen.de/software/loopmidi.html[loopMIDI] 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 '[l[http://www.midiox.com/myoke.htm[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
• '[l[https://www.youtube.com/watch?v=JgFy-iY8xvA[Around 50 minutes of Yamaha's XG demo tracks] (YouTube video)
• '[l[https://drive.google.com/file/d/12lhjzNLie7qVMW73TIB1nwh-AOr9eKbM/view?usp=drivesdk[Pastel Reverie by Wally Chantek]
• '[l[https://drive.google.com/file/d/1W3iwCxp_IA5NNdwdWjtAZdzFmOsh_lbj/view?usp=drivesdk[XGroove by Yasutaka Nakata]
• '[l[https://drive.google.com/file/d/12u7b6aY3B6kjj-e6zqIH-fkBaiBX2-qA/view?usp=drivesdk[Tenshi.mid]
• '[l[https://drive.google.com/file/d/1QxUFIpyzDTjvvogNiBqSqzbJkaxxRFMC/view?usp=drivesdk[Cafe Jungle, produced by Yamaha MusicSoft Europe]
• '[l[https://drive.google.com/file/d/1AB7wV2yMNEbwrlQ2nPIQmxuOqw3tE5U7/view?usp=drivesdk[Cop Out, produced by Yamaha MusicSoft Europe]
'[#[External Links]
In case of any of these URLs ever becoming inaccessible, please use the Archive.org
• '[l[http://www.jososoft.dk/yamaha/docs_specs.htm[Yamaha XG official specifications and guides (archived)]
• '[l[http://geertjalink.nl/downloads/yamaha/manual/SYXG50data.pdf[S-YXG50 Instruments and MIDI implementation]
• '[l[https://www.youtube.com/watch?v=PF9ul5JFAH0[Video introduction to XG synths by Speedy]
'[#[See also]
'[[MIDI (format)]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment