S-YXG2026 Hybrid

Package 0.1.5

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.

Package 0.1.4

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.

Package 0.1.3

Preserves S-YXG2006LE's native fallback for Yamaha panel banks 0/112 through 0/127. This keeps DGX/PSR-era panel-voice MIDI on the newer source engine when an exact panel slot is absent from its compact table. Undefined ordinary XG variation slots still fall back to S-YXG50.

Package 0.1.2

Adds Yamaha MU Voice Map Select support. MU Basic selects S-YXG50 for basic bank 0/0, while MU Native restores the normal automatic hybrid voice choice. MIDI files that send neither message retain the existing automatic routing without an audible change.

S-YXG2026 Hybrid is an experimental 32-bit VST2 instrument assembled for software-synth preservation research. It combines three generations of discontinued Yamaha technology in one real-time instrument:

This project is believed to be the first publicly documented modern Windows VST2 integration of S-YXG2006LE PCM voices, S-YXG50 full-XG voices and DSP, and the Japanese S-YXG100 VL/PVL and SG engines in one real-time instrument. Earlier private or unpublished work may exist.

This is a deeper hybrid than simply switching between complete plugins. Sixteen isolated S-YXG2006LE instances provide one dry source per MIDI part. Their built-in reverb and chorus are held at zero. The wrapper derives dry, reverb-send, chorus-send, and variation buses for every part and inserts those buses into S-YXG50 before its effects stage. System variation follows CC94. In insertion mode, the assigned part is routed in full through the variation processor, including that effect's own wet/dry balance and downstream sends. The insertion source is supplied before part volume, expression, and pan; S-YXG50 applies those controls after the effect, as the original engine does. VL/PVL and SG use the same recovered S-YXG50 effects bridge.

Current status

This is a public test build. The following behaviours have passed automated, measured, or live host tests:

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 routing as 2006LE/XG50, VL/PVL, or SG alongside bank, program, note activity, controllers, pitch bend, and effect sends. It also reports whether the 2006LE runtime and Yamaha effects bridge loaded. Its small engine activity graphic is supplemental; the same values are always available in 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.

Experimental limitation: ordinary bank, program, controller, pressure, pitch-bend, and note messages are mirrored into the relevant S-YXG2006LE part. Arbitrary SysEx is not sent directly to the original 2006LE VST because its isolated SysEx entry path faults. S-YXG50, VL/PVL, and SG still receive their established SysEx paths. MIDI files that configure unusual 2006LE part state exclusively through SysEx need further testing and may require explicit translation in the wrapper. XG rhythm-part mode, system variation, and insertion variation routing are already translated and supported.

Real-time use

Load syxg2026-hybrid.dll in a 32-bit VST2 host, or a host with a suitable 32-bit bridge. Its product name is S-YXG2026 Hybrid and its VST ID is S2HY, so it can coexist with S-YXG50, S-YXG2006LE, and S-YXG100 Hybrid.

Foobar2000 with the MIDI Player component can load it through that component's VST bridge. Select the new product name explicitly; do not replace the established S-YXG100 Hybrid while this candidate is being evaluated.

Runtime files

In the packaged tester archive, these files are grouped in the VST folder. Keep them together in that one runtime directory:

syxg2026-hybrid.dll
syxg2026-vl-worker.exe
syxg2026-sg-worker.exe
syxg50-engine.bin
syxg2006le-engine.bin
sxgbnw6l.tbl
sxgdat6l.tbl
Sxgpvknl.vxd
sxgsgknl.vxd
syxg2026-hybrid.version.json

The first three files and the version marker are produced by this project. The other six are original Yamaha runtime files and are not distributed by the source project. A tester must provide them from software they are entitled to use. The compatible S-YXG50 and S-YXG2006LE VST binaries retain DLL contents but use .bin names so a host does not list the private child engines as additional selectable instruments.

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 S-YXG100 Hybrid issue 4 and agrees with Wine 11's documented new-WoW64 behaviour. Wine remains community-tested rather than a primary supported platform.

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\syxg2026-hybrid\backups. A failed replacement is restored automatically, and unrelated files are not changed.

Voice selection

The wrapper reads S-YXG2006LE's own compact bank map. A defined slot is rendered by the newer source engine. An undefined ordinary XG slot remains on S-YXG50, retaining voices omitted by the XG Lite product. Defined Yamaha panel banks 0/112 through 0/127 stay on S-YXG2006LE when an individual program slot is absent, preserving the original engine's native basic-voice fallback for DGX/PSR-era MIDI. Bank-select MSBs 33, 81, and 97 continue to activate VL/PVL. Yamaha model 0x5D SysEx activates SG.

If a MIDI file sends no MU Voice Map Select message, that automatic hybrid choice remains unchanged. The standard parameter F0 43 1n 49 00 00 12 mm F7 is supported: value 00 sends basic bank 0/0 voices to S-YXG50, while value 01 restores the normal hybrid choice. Variation banks, drum banks, VL/PVL, and SG are unaffected. The choice persists across GM, GM2, GS, and XG resets. Unsupported values are ignored.

Note releases are sent conservatively across PCM ownership transitions. This prevents a note started before a bank change from becoming stuck, while note-ons still have only one PCM owner. SG-owned note-ons bypass both PCM sources and retain the accepted SG output path.

Reporting a problem

Include the MIDI filename, host and version, sample rate, approximate playback position, and the selected sound or bank. Listen for wrong fallback voices, doubled notes, stuck releases, missing controllers, unusual effects, VL/PVL or SG regressions, and differences between 44.1 and 48 kHz. A short reproducible MIDI file is more useful than a rendered recording alone.

Redistribution

The project source does not distribute Yamaha binaries, tables, songs, or firmware. Do not publish a runtime containing those files without the necessary rights. The integration code is available under the MIT License.