S-YXG100 Hybrid
Current package 0.1.9
Reset-free MIDI files now keep channel 10 as drums when selecting bank zero. Startup no longer assumes an XG reset has already arrived. Explicit XG resets still permit melodic channel 10; other reset modes, gains and effects are unchanged. This fixes a general startup case, not a filename-specific rule.
Package 0.1.8
This update preserves native VL voice edits when a worker first starts later in a song. Timeless's closing volume-expression fade no longer reverts to breath-controlled timbre or jumps in level. Full-volume gain, master-volume handling, SG and the existing effects path are unchanged.
MU-derived AWM voices replace the classic small fallback sound set. VL/PVL, SG, and existing software effects routing remain. S-YXG2026 retains 2006LE precedence for its supported voices.
Voice and drum mapping corrections
This release corrects MU-exclusive MSB 48 sub-banks, including Anathema, and preserves SFX drum bank 126 when a part has an explicit rhythm assignment. The latter prevents SFX Techno Kit from being mistaken for a standard drum kit. These changes require the matching converted engine; an older engine retains its previous bank support.
Experimental MU insertion compatibility
This release can translate independent MU Effect 2 distortion (49/00) and overdrive (4A/00) assignments for external VL/PVL audio and a single routed SG part. Each supported insertion uses a separate, voice-free instance of the existing software XG DSP. The song's normal XG reverb, chorus and variation remain unchanged, including system delay.
The private processor uses insertion connection, so the requested Dry/Wet balance is honoured. Its own system-effect sends are disabled; the processed output enters the song's existing sends once. No MU-matching gain trim is applied.
This is an approximation using XG algorithms, not the MU effects chip. It does not add independent insertions to converted AWM or 2006LE voices. Unsupported algorithms, effect-controller modulation, chained assignments and inseparable multi-part SG routes remain bypassed. Worker pan and send proportions are recovered over the existing 128-frame DSP quantum. Distortion can increase peaks and require additional host headroom. Listening tests confirm the restored FatPizz lead, but its balance differs from MU firmware emulation. Hardware-identical timbre and level are not claimed; no compensating limiter or shared gain change has been added.
MU-derived sound set
Complete packages now contain MU1000-derived voices and drum kits, converted
for the lightweight S-YXG50 software engine. The converted tables and waves are
embedded in syxg50-engine.bin, which is approximately 87 MiB
with the extended banks included in this release.
No separate MU ROMs, wave tables, Python, or conversion tools are needed to
play it. Keep the entire VST folder together and load the Hybrid DLL.
The software XG effects processor and recovered VL/PVL/SG workers remain. This is not MU hardware emulation: some three/four-element voices are folded to two elements, unsupported effect types use approximations, and some loops retain conversion limitations. Familiar songs can sound different. Use original S-YXG50 for its original sounds, or Mu2026 for its separate firmware-emulation effects path. Mixing many loud parts can exceed digital full scale; retain floating-point headroom and reduce host gain when needed.
The default map is MU Native. MU Voice Map Select SysEx
F0 43 10 49 00 00 12 00 F7 selects Basic;
replacing the final data byte with 01 selects Native.
The converted engine's Yamaha Settings page also offers its Basic map checkbox.
In 2026, use MIDI map select to keep the 2006LE routing choice synchronized.
Native-map QWS and REAPER definitions are in their respective package folders.
Install the QWS file in its instrument-list directory and load the REAPER
bank file in ReaControlMIDI. Sampler placeholders have been omitted.
Existing signed updaters replace the embedded engine automatically. New instrument definitions are provided in the complete archive; copy those into QWS or REAPER separately when updating. No manual ROM swapping is needed. The GitHub source and release assets contain no Yamaha binaries or ROM data.
Master volume
XG Master Volume and Universal Real-Time Master Volume also control the added VL/PVL audio. Fades therefore include those voices, rather than only the original XG backing. Full master volume does not add gain. SG keeps its own native master-volume handling and is not attenuated twice. Effects retain their natural tails. The external source uses a power-law envelope; Yamaha's quantized native envelope may differ at intermediate levels. This is not a claim of bit-identical hardware behaviour.
VL setup correction
This release preserves bank/program selection and subsequent native VL voice edits in their original order when a worker first starts later in a song. Restoring current controllers no longer reloads the same preset and erases those edits. This includes a voice's expression mode: volume-expression fades should remain volume fades, rather than reverting to breath-controlled timbre. Intentional later program changes still reload presets normally; full-volume gain is unchanged.
Setup retention remains bounded. If its existing event or SysEx capacity is exhausted, the current bank/program snapshot is used as a fallback; arbitrary unbounded edit histories are not guaranteed. This release is not a fix for a host that filters or omits MIDI SysEx.
Conversion credits and licence
Thanks to Soundshock for SXG-Create, NightFright2k19 for
SXG-Create-NF,
and JOELwindows7 for suggesting its integration. This conversion uses upstream
revision 596e23209cf9d08fb199769be8a9a2adf8b1e822.
These credits supplement the existing Yamaha and original VST creator credits;
they do not imply endorsement or permission to redistribute Yamaha data.
BSD 3-Clause License Copyright (c) 2026, Soundshock Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Version 0.1.4
Corrects an SG startup memory error that could crash the singing worker under Wine. The legacy one-slot setup now supplies the one-based slot number expected by Yamaha's native helpers. The loaded image is checked before this correction is applied, and the Yamaha file on disk remains unchanged.
Version 0.1.3
Prepares the eight VL helpers and the SG helper in a serialized, below-normal-priority background phase when the host activates the plug-in. This removes process creation and Yamaha-engine initialization from first-note MIDI processing. A single active plug-in instance reserves approximately 60-70 MB for its ready helpers; hosts that prebuffer multiple instances multiply that figure.
Version 0.1.2
Adds an accessible native editor and handles complete Yamaha model
0x64 Plug-in Voice bulk transactions. Songs can now load and
change their embedded VL voices during playback, including the associated
bank, program, volume, mono/poly, pitch-bend range, portamento, reverb, and
chorus settings.
S-YXG100 Hybrid is a recovered 32-bit VST2 instrument that combines the MU-derived S-YXG50 AWM engine with recovered Yamaha VL/PVL physical modelling and SG singing synthesis from S-YXG100. It was created to make music written for the discontinued Windows 9x S-YXG100 software playable in modern VST hosts.
The project began as preservation research. Original S-YXG100 songs could still be played in an old virtual machine, but its audio path was restricted and its smaller wave set sounded noticeably worse. The hybrid keeps the reliable XG50 voice and effects path, then routes VL and SG MIDI into recovered native engines running in isolated helper processes.
The source is published so the preservation work can be studied, verified, and extended. The current runtime is a 32-bit Windows VST2 implementation and is not directly portable to macOS: a native port must replace its Win32 host, process, shared-memory, and event integration, and provide a lawful compatible path for the legacy synthesis runtime or reimplement those interfaces.
Current status
The current build is validated for real-time use at 44.1 kHz. Complete VL and SG trace renders also pass at 48 kHz through a streaming sample-rate adapter, and live Foobar2000 playback confirms that the former 48 kHz worker stall and crash are gone. Listening tests have verified ordinary XG playback, legacy monophonic VL, assignment- defined multi-channel PVL, SG singing, calibrated native gain, and Yamaha reverb and chorus processing. Dense-event forwarding, controller timing, voice allocation, and legacy channel routing have been corrected against the original engines and Windows 9x reference playback. Ordered setup replay also preserves custom VL voice uploads instead of replacing them with a redundant program selection. Note, sustain-pedal, and all-notes-off ownership survives bank changes in either direction, preventing held XG or VL notes from being stranded when a channel changes synthesis engine before release. Channel 10 keeps its GM-style drum default before any system reset, including ordinary bank-zero selections. It also starts in rhythm mode after reset. XG melodic banks release that implicit default and bank 127 restores drums; GM1 and GS bank selections preserve the channel-10 drum default, with their original bank, program, and drum-note layout passed through to S-YXG50 unchanged. GM2 uses bank 120 for rhythm and bank 121 for melodic operation. Explicit Yamaha part-mode SysEx continues to take priority.
This remains preservation software rather than a bit-exact emulator. Fast VL pitch bends pass real-time comparison after the wrapper was corrected to preserve complete ordered RPN setup transactions. The retained validation catalogue now plays XG, VL, PVL, and SG correctly in Foobar2000. Processed variation effects remain less thoroughly measured than reverb and chorus.
Accessible editor
The plug-in editor opens a native Windows dashboard with three pages: live status, under-the-hood routing, and the original Yamaha editor. Status uses standard named controls and a 16-channel report list that exposes the active engine, bank, program, note activity, controllers, pitch bend, and effect sends to screen readers. Its small engine activity graphic is supplemental; the same values are always available in the selected-channel text.
Use Alt+S, Alt+U, or Alt+Y for the three pages, F5 or Alt+R to refresh, and Alt+C to copy a complete text report. Tab and Shift+Tab move through the controls, and arrow keys switch among the page buttons. Live updates change rows in place without rebuilding the list or moving focus.
The status page describes the live plug-in instance owned by its host. VSTHost therefore exposes current channel activity. Foobar2000 MIDI Player may render a MIDI file ahead of playback and later open the editor on a new, idle instance; in that host the status page can consequently show defaults even while Foobar2000 is playing its already-rendered audio.
Host rates of 44.1 and 48 kHz are supported. The recovered VL and SG engines remain fixed at their proven 44.1 kHz native rate. At 48 kHz, the wrapper converts their separate dry and effect-send buses while preserving continuous timing across host blocks. Other rates are not yet validated.
Real-time use
Load syxg100-hybrid.dll in a 32-bit VST2 host, or in a host
that provides a 32-bit bridge. MIDI can then be played from files, a
sequencer, or a live controller.
Foobar2000 with the MIDI Player component can use the instrument through that component's 32-bit VST bridge:
- Set MIDI Player's sample rate to 44,100 or 48,000 Hz.
- Add
syxg100-hybrid.dllas a VST synthesizer. - Select S-YXG100 Hybrid for MIDI playback.
Its VST ID is S1HY, so it can coexist with the original
S-YXG50 without being treated as a duplicate.
Runtime files
In the packaged tester archive, these seven files are grouped in the
VST folder. Keep them together in that one directory:
syxg100-hybrid.dll syxg100-vl-worker.exe syxg100-sg-worker.exe syxg50-engine.bin Sxgpvknl.vxd sxgsgknl.vxd syxg100-hybrid.version.json
The first three files and the version marker are produced by this project.
The three Yamaha runtime files are not distributed by the source project. A tester must
provide them from software they are entitled to use. Complete preservation
packages already contain the converted syxg50-engine.bin.
Source-only users may rename a compatible S-YXG50 VST to that filename,
but must convert it separately to obtain the expanded sound set. Its contents remain a
Windows DLL; the different extension prevents a host from listing this private
child engine as a second selectable S-YXG50 VST.
Wine compatibility
The 32-bit plug-in and its separate native VL/SG workers can run under Wine, but the workers require Wine's newer WoW64 process arrangement. A user reported that an incompatible prefix let ordinary XG play while the VL worker faulted as soon as a VL note sounded, causing the part to fall back to piano. For Wine 11, use a 64-bit prefix and force the newer WoW64 mode when launching the 32-bit VST host:
WINEPREFIX="$HOME/.wine-syxg" WINEARCH=win64 wineboot WINEPREFIX="$HOME/.wine-syxg" WINEARCH=wow64 wine /path/to/vst-host.exe
WINEARCH=wow64 requires a prefix that was created as 64-bit,
which is Wine's default. It cannot convert a pure
WINEARCH=win32 prefix; create a separate 64-bit prefix instead.
This workaround was reported in
issue 4
and agrees with
Wine
11's documented new-WoW64 behaviour. Wine remains community-tested
rather than a primary supported platform.
Updating
Linux users can run sh ./Update-YamahaHybrids.sh without
PowerShell or Wine. Keep the accompanying Python script and product/key JSON
together. Python 3.9+ and OpenSSL are required. See the
Linux updater guide for commands, signed
verification, rollback and limits. Synth audio and version are unchanged.
If a master-volume fade is missing in Falcosoft's VST output, disable Device settings, Mixer, Use Sysex for Volume/Balance, keep MIDI-file SysEx enabled and replay from the beginning. Controlled host tests and the reporter's Wine retest confirmed that this restores message delivery.
Close Foobar2000, REAPER, VSTHost, and any other program using the synth,
then run Update Yamaha Hybrids.cmd. The updater can live beside
this product folder, inside it, or in a shared parent folder containing both
Yamaha hybrids. It searches no more than two folder levels and updates only
synths whose DLLs are already installed.
The updater checks stable GitHub releases, displays the release notes, and asks before replacing anything. Signed metadata limits each release to the known files for the detected product, and every downloaded file is checked against its signed SHA-256 hash.
Before replacement, the current managed files are saved in one compressed
rollback ZIP outside all plug-in folders. Only the newest rollback is kept,
under %LOCALAPPDATA%\Onj Research\Yamaha Hybrid Updater\syxg100-hybrid\backups.
A failed replacement is restored automatically, and unrelated files are not
changed.
Where the synthesis data lives
No separate .tbl files are required by this hybrid. The converted
MU waveform and table payload is embedded in the resources of the supplied
S-YXG50 VST. The recovered VL/PVL and SG model data is contained in
Sxgpvknl.vxd and sxgsgknl.vxd. The hybrid DLL itself
contains integration code rather than Yamaha waveform data, which is why it
is substantially smaller than syxg50-engine.bin.
What to expect
- Ordinary GM and XG MIDI uses the MU-derived AWM software engine. GM1, GM2, GS, and XG reset messages also clear Hybrid routing state.
- Bank-select MSBs 33, 81, and 97 activate VL/PVL synthesis.
- Yamaha model
0x5DSysEx activates SG singing synthesis. - Legacy VL songs without voice-assignment SysEx retain their original monophonic channel routing.
- Assignment-defined PVL songs use Yamaha-compatible eight-note polyphony across their assigned source channels.
- Held notes and sustain release cleanly when a channel changes between XG and VL.
- Isolated voice workers render concurrently and consume no callback-keeper CPU while idle.
- VL and SG reverb and chorus sends pass through the Yamaha XG effects engine.
- Native output is calibrated against original Windows 9x reference recordings.
Reporting a problem
Include the MIDI filename, host and version, sample rate, approximate playback position, and whether the symptom affects ordinary XG, VL/PVL, SG, or only an effect. Useful checks include incorrect banks, missing or stuck notes, fast pitch bends, timing changes, low output, missing effect tails, transport seeking, and repeated song changes.
Redistribution
The project repository does not distribute Yamaha runtime files, demonstration songs, tables, or firmware. Private preservation test bundles may contain files recovered from an entitled installation solely for compatibility testing; do not republish those Yamaha-derived files without the necessary rights. A generally shareable project build should contain only the hybrid wrapper, its two workers, this guide, and applicable project licence files. The project integration code is available under the MIT License.