S-YXG100 Hybrid

Version 0.1.1

Fixes drum NRPN controls on additional MIDI channels by preserving Yamaha's own drum-bank setup. All 15 submitted test files render identically to original S-YXG50, while melodic playback on channel 10 remains supported. Includes the signed updater for existing installations.

S-YXG100 Hybrid is a recovered 32-bit VST2 instrument that combines the cleaner 4 MB 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 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.

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:

  1. Set MIDI Player's sample rate to 44,100 or 48,000 Hz.
  2. Add syxg100-hybrid.dll as a VST synthesizer.
  3. 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. Rename the compatible portable S-YXG50 VST to syxg50-engine.bin. 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.

Updating

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 4 MB XG 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

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.