Mu2026 Hybrid
Preview 0.2.3: Reset-free MIDI drums
Files without a system reset keep channel 10 as drums after bank-zero selections. Explicit XG resets still allow melodic channel 10. Other resets, gains and effects are unchanged.
Generate DX and AN voice banks
The data-free Voice Bank Tools 1.0.0 support Windows and native Linux. Supply the supported PLG150 firmware and Yamaha manuals, then generate plg-dx-voices.bin and plg-an-voices.bin for preview 0.2.2. The HTML conversion guide documents inputs, setup, bank formats and limits. Linux conversion does not need Wine or PowerShell. Raw firmware is not a drop-in bank, and arbitrary AN1x/AN200 voices are not supported. Generated Yamaha data is not included in public downloads.
Research prerelease 0.2.3: DX and a native AN approximation are integrated into the existing Mu2026 instrument, not separate plugins. This is an opt-in preview, not a stable update or a claim of hardware-equivalent AN. VL/PVL, SG, MU2000 and 2006LE retain their existing engines and gains.
This is a separate, experimental 32-bit Windows VST2 instrument. It is not an update to S-YXG100 Hybrid or S-YXG2026 Hybrid.
What plays
MU2000 supplies the main XG voice set. Where a requested voice is not distinct in the MU2000 program ROM, the S-YXG2006LE engine can supply its additional voice. Native VL/PVL and SG workers handle their own MIDI parts. The plugin's unique ID and name differ from the existing Yamaha plugins.
Effects
The modified MU2000 engine accepts sixteen internal audio channels: eight stereo buses for dry, reverb, chorus, variation, and insertions 1-4. Audio from 2006LE and the native workers enters the appropriate MU2000 effect path before final output. Insertions 2-4 use the MU2000 slave DSP. MU2000 voices retain the effects implemented by S-MU2000. XG50 is neither loaded nor used for effects or voices.
Each insertion follows the MIDI part assigned by Yamaha SysEx. VL voices and 2006LE parts are routed separately. SG uses an insertion only when its worker output belongs to one assigned channel; a combined multi-channel SG output cannot safely be separated at this point.
From version 0.1.3, channel controller settings are retained even when sent before selecting a VL bank. This preserves early volume, reverb, chorus and CC94 system-variation sends when the VL worker starts. MU note events are not replayed into VL. MU insertion effects and restored early sends can make a passage sound different from the older S-YXG100 Hybrid; those differences are not automatically evidence of a missing effect.
Version 0.2.2 also forwards CC91, CC93 and CC94 to MU for VL parts assigned to insertions 2-4. MU then routes the processed insertion output into its system effects; the unprocessed worker sends are not added a second time. Earlier controller values are restored if the insertion is assigned later. Parts without those insertions retain their existing worker-send path. This corrects a missing post-insertion delay path without increasing VL gain. FatPizz's restored delay is confirmed by listening; exact physical-hardware levels remain unverified.
The matching MU engine incorporates upstream S-MU2000 through commit 67c550e5bc58110dd527a745083e4e8aa25af919 (merged pull request 121), including sampler waveform synthesis and subsequent fixes. Sampler, resampler, ROM-directory, SysEx-memory and external-effects checks passed. This does not replace the approximate AN engine with hardware emulation or supply new ROMs. Screen-reader accessibility of the upstream sampler editor remains unverified.
External audio is level-matched before it enters MU2000's effects. The modified engine retains headroom above unity at that input so louder SG passages are not clipped before the effects stage. MU2000's own voices are unchanged.
AN listening candidate
When plg-an-voices.bin is beside the DLL, recovered PLG150-AN presets select a native virtual-analogue engine. This is a parameter-compatible approximation, not Yamaha VOP3 chip emulation. It provides two oscillators, pulse-width modulation, approximate sync/FM and multi-saw, ring modulation, noise, pitch/filter/amplitude envelopes, resonant filtering and a basic amp simulator. It has no additional worker process.
Native AN banks are MSB 36, LSB 0 and 1 (QWS banks 4608 and 4609); LSB 2 contains the recovered factory user-slot assignments (QWS 4610). MSB 84 and 100 select the recovered XG aliases. The bank contains 256 factory presets and 848 selections, not 848 unique sounds. Missing MSB 36/84 selections are silent; an unmapped MSB 100 note stays in the existing MU/fallback path. Four documented alias names remain unresolved rather than being guessed.
The candidate supports five simultaneous AN notes per MIDI channel, mono/legato with held-note return, sustain, volume, expression, pan, pitch bend, RPN range/fine/coarse tuning, per-note scale tuning, CC71-75 filter/envelope offsets, and selected controller-matrix destinations from CC, assignable knobs, channel pressure, pitch bend, note velocity and key position. Filter velocity sensitivity is implemented. Filter envelope timing, depth and resonance use explicit candidate calibrations, not recovered Yamaha DSP curves; RnB's pitch correction is accepted but its filter character still needs listening comparison. Voice three-band and part two-band EQ are approximated, including part EQ NRPN edits. Bank changes affect new notes while older voices continue to receive releases. AN feeds MU dry, reverb, chorus, variation and any of the four assigned insertion inputs. Insertion-connected variation uses its own input without overwriting a native MU insertion.
The isolated follow-up plays recorded Free EG tracks, including second/bar duration, one-shot endpoint retention and forward/alternate full/half loops. It implements LFO waveform shapes, LFO destination selection and selected PWM modulation sources. The reference-tested saw pitch behaviour is retained; the measured RnB bass octave matches the reference without a MIDI transpose or gain increase. The saw pulse-width transfer curve is still approximate.
The integrated control path connects pulse-width/depth, high-pass and feedback matrix destinations, received CC/aftertouch Direct edits, independent FM depth/wave selectors, and VCO2 sine/triangle cross-modulation. Untouched Direct knobs preserve factory settings. FM and cross-modulation depth laws remain approximate; these changes do not change engine gains.
Known gaps: oscillator and filter character, envelope/modulation scaling, EQ calibration and amp-simulator calibration are approximate. Free EG keyboard tracking and external-clock timing are unverified; bar timing currently uses the voice tempo or 120 BPM for MIDI-clock mode. Sample-and-hold distribution, inner-wave shapes, audio-rate PWM and FM remain approximations. The arpeggiator, user-pattern selection, alternate sequencer loops, full unison, morphing, the complete controller matrix, custom voice dumps and exact native editing are not implemented. Direct edits currently cover mapped scene fields from CC/assignable CC/aftertouch, not the full hardware matrix. Trance, Old_Tek and ProgRock need renewed listening against the reference; automated tests have not established hardware-equivalent timbres. Five notes per channel is a software extension, not the original board's shared five-note limit. This candidate requires listening feedback; no hardware-equivalence claim is made.
Factory parameter recovery credits Yamaha and dump contributor Zhiyuan Wan/rgwan. The parameter layout and bank maps were checked against Yamaha's PLG150-AN manual. The original dump provenance is retained from rgwan's firmware research. Yamaha-derived parameter data stays outside public source.
Manual-backed AN corrections: the separate high-pass filter now precedes the main VCF and has a 6 dB/octave slope. LP18 uses three poles rather than averaging the 12- and 24-dB responses. Mixer feedback is taken after the voice amplifier, and the board distortion stage follows that amplifier. Amplifier type Off no longer bypasses distortion drive or its wet-path low-pass control; the documented 1 kHz to Thru cutoff settings are connected. The low-pass topology, distortion curve and cabinet colouring remain approximations, not recovered Yamaha algorithms. These corrections do not establish that the demo timbres now match hardware, and do not change other engine gains. Sources: Yamaha AN Expert Editor manual and the PLG150-AN manual linked above.
Oscillator listening candidate: VCO Edge now changes the sound, including recorded Free EG, controller-matrix and received Direct edits. Edge zero produces a sine shape; intermediate settings crossfade towards the existing sharp waveform rather than reproducing unpublished Yamaha DSP. Unsynchronised saw2 retains a fundamental instead of aliasing saw1. Sync master/slave pitch modulation is selected independently of the FM algorithm, and sync resets preserve their fractional-sample timing. LFO Reset Off uses a continuous part clock rather than restarting each note; Key-on still restarts it. PWM's LFO2-phase source uses the documented 60-degree offset. The complete documented resonance range is retained rather than flattening its upper quarter. Inner waves, the LFO speed curve and filter transfer curves remain approximate. Seventy-second full-mix comparisons are listening evidence, not proof that Trance, ProgRock or Old_Tek now match hardware. Source: Yamaha AN1x manual and the PLG150-AN manual.
Stored step patterns: single voice-pattern playback supports Normal and Shift & Normal keyboard modes, the split point, C2 transposition base, forward/backward loops, stored notes, velocities, rests, gate lengths, swing, controller steps and Hold. Long gates overlap using the existing five-voice part limit. A trigger release with Hold off, panic or system reset stops the pattern; patch changes stop its generator while releasing its notes. Free EG MIDI-note triggering is retained across generated steps. The HardNoiz preset used by Trance enables this sequencer; playing only its incoming held note previously omitted the recovered eight-step phrase. External MIDI-clock timing, user-pattern selection and alternate-loop modes remain unsupported. MIDI-clock tempo currently falls back to 120 BPM. Pattern playback does not establish exact oscillator or effects parity.
Listening findings and help wanted
What listening confirms: Trance now sounds closest to its hardware recording after restoring HardNoiz's stored eight-step phrase. ProgRock, Old_Tek and RnB still sound much like the previous candidate. Those timbre faults remain unresolved. Different samples or passing tests do not establish an audible improvement or hardware parity.
| Example | Listen for | Current finding |
|---|---|---|
| Trance | Opening pitched sequence, rhythm, rests and later evolving sound. | The stored pattern improved the local comparison; exact tone and effects remain unverified. |
| ProgRock | Opening oscillator sync/FM, attack and distortion or amplifier character. | Still differs from the recording; exact inner waves and drive are approximate. |
| Old_Tek | Speech-like vowel movement, level and modulation timing near the opening. | Still not a faithful match. |
| RnB | Bass octave, filter sweep, resonance and envelope response. | Pitch correction is accepted locally; the filter character remains unresolved. |
Use the same MIDI, bank/program, sample rate, controller setup and effect sends on both instruments. Reset each instrument before the comparison. Note whether a difference remains with effects disabled; do not replace the requested preset or adjust its gain to conceal a mismatch. Whole-song peaks alone cannot establish a synthesis defect.
For a report, include the preview version, host, sample rate, buffer size, bank MSB/LSB and program (state whether programs are zero- or one-based), affected passage, and the expected versus actual sound. Say whether the reference is physical PLG150-AN, AN1x, another implementation or a recording; they are not interchangeable proofs. Check copied diagnostic reports for private paths before posting.
Hardware owners can help most with short isolated notes, filter cutoff/resonance sweeps, envelope tests, Edge and pulse-width sweeps, sync/FM comparisons and stored-pattern timing. Attach only material you own or have permission to share. Please do not upload ROMs, firmware, recovered Yamaha parameter banks or third-party reference recordings to GitHub issues.
Short probes of all 256 recovered AN presets remained finite and bounded, 27 automated test suites passed, and four 70-second full mixes had no full-scale output samples. Tested MU, DX, SG, PVL and 2006LE comparisons remained byte-identical to the preceding source candidate. These checks do not establish extended-session stability, very small-buffer performance or hardware timbre parity.
DX voices
When plg-dx-voices.bin is present beside the DLL, banks with MSB 35, 67, 83 and 99 select a native six-operator FM engine. The supplied parameter bank contains 1,602 recovered selections, including aliases and layered voices; that is not 1,602 unique sounds. DX enters MU dry, reverb, chorus, variation and all four insertion paths. It does not require an additional worker process or execute Yamaha DX firmware.
Supported controls include volume, expression, pan, sustain, sostenuto, note/velocity limits, bend range, RPN fine/coarse tuning, per-note scale tuning, and explicitly assigned modulation-wheel, channel/poly-aftertouch and assignable-controller pitch depths. Sostenuto holds only voices sounding when the pedal engages; sustain can continue holding them after sostenuto is released. Reset All Controllers releases pedal-held notes, and Omni-mode messages perform All Notes Off. Checked VCED/VMEM dumps, operator-enable masks and the implemented native level/feedback edits are supported. A bank change affects future DX notes; held DX voices receive their later note-offs rather than being cut at the switch.
DX velocity-depth/offset transfer curves and per-message receive switches remain unimplemented. This candidate does not invent those curves from the manual's qualitative descriptions.
This is not a complete PLG150-DX emulation. Amplitude modulation, EG bias, filters, portamento, ACED processing and phase/shared-LFO fidelity remain incomplete. Operator-enable masks apply when a new voice starts; exact live-edit equivalence is not established. Ninety-seven documented selections are unrecovered, native bank coverage is partial, and undefined DX-XG cells do not yet implement hardware fallback. Missing recovered sounds remain silent rather than being guessed. Exact layered-voice metadata and detune calibration need independent reference comparison.
The FM core comes from Google's Apache-2.0 Music Synthesizer for Android; see the included FM core license and notice. Parameter recovery credits Zhiyuan Wan/rgwan and Yamaha's official PLG150-DX manual. Yamaha-derived parameter data is not included in public source.
The existing native VL path is unchanged: the DX held-note fix is not a confirmed fix for Dogroova's VL patch-change cutoff. An attempted VL deferral preserved the old note but lost subsequent voices, so it was rejected. That remains a separate compatibility investigation.
Required files
Keep the VST DLL, mu2000-engine.bin, both worker executables, syxg2006le-engine.bin, its two table files, and both VXD files together. Provide the MU2000 program and wave ROMs in a roms subfolder. For a local test, roms.txt can instead contain a relative path to an existing S-MU2000 ROM directory. Relative paths are resolved from the plugin folder. ROMs and Yamaha binaries are not part of public source.
The program ROM is mu2000_flash.bin. The four 8 MB wave ROMs are xv364a0.ic49, xv365a0.ic50, xw848a0.ic53, and xw849a0.ic54, placed in the ROM layout expected by S-MU2000.
Instrument definitions and updates
For QWS, copy QWS/inst_mu2026_hybrid.ini beside qws.exe, then restart QWS to discover the list. The inst_ filename prefix follows the naming used by the other QWS definitions.
The source repository includes definitions for QWS and Reaper. They combine the existing MU1000/MU2000 voice names with VL/PVL, SG and recovered DX/AN names. AN entries are labelled as approximations. Some inherited PLG expansion names may describe optional hardware that this plugin does not emulate. An instrument-list entry alone does not establish hardware compatibility.
The DX entries list only recovered factory selections. Unrecovered entries and initially empty DX user slots are omitted. After loading a VMEM bank, user sounds are selectable manually at MSB 35, LSB 0 (QWS bank 4480), programs 0-63; a VCED edit buffer is at MSB 83, LSB 2, program 0 (QWS bank 10626).
Run Update Yamaha Hybrids.cmd from the plugin folder or its parent to check for signed stable code updates. Close Foobar, REAPER, VSTHost, and other audio hosts before installing. The updater preserves locally supplied Yamaha data, mu2026.ini, and roms.txt. It stores a compressed rollback outside the plugin folder. The updater deliberately ignores this 0.2.2 research prerelease; stable 0.1.3 remains on the normal update channel. Test the preview manually in a separate folder rather than overwriting your stable install.
Performance settings
The manual code package includes a default mu2026.ini beside the VST DLL. For a source build, copy Config/mu2026.ini there. At load, the plugin selects Yamaha's original firmware path for MU notes, controllers, envelopes and voice allocation, while external VL, SG and 2006LE audio still enters the MU effects buses. The older native=1 shortcut is no longer used, even if an existing INI retains it. It could omit drum filtering and change synthesized effects such as Feed. The suspend_unused=1 setting makes instances that have never received MIDI return silence without rendering the MU engine. Foobar's MIDI component loads three instances; with a single-port song, this avoids spending audio-thread time on the two silent ones. An instance starts normal rendering as soon as it receives any MIDI event. This does not change the standalone S-MU2000 plugin. Updates preserve your existing INI.
INI example and buffering guidance
Close the audio host before editing. Put mu2026.ini in the same folder as mu2026-hybrid.dll, not beside the updater if the DLL is in a separate VST folder. Keep only one [engine] section and update existing keys rather than adding duplicates. This is the recommended starting configuration:
[engine]
suspend_unused=1
vl_sg_gain=2.0
xgl_gain=0.75
If an older INI already exists, check that suspend_unused=1 is present under [engine]. If the file or key is missing, unused-instance suspension is disabled. Setting it to 1 avoids rendering instances that have never received MIDI; it does not suspend an active musical part or reduce polyphony. This is particularly useful in Foobar, but it cannot guarantee that every host or very small audio buffer will be glitch-free. Restart the host to load changes. Do not change the gain settings to cure buffering.
Version 0.1.2 ignores the old native INI key; it can be removed, but no manual change to that key is needed for the compatibility fix. Existing user INIs are deliberately preserved by the updater, so updating alone does not add a missing suspend_unused key. If audio still breaks up, try a larger host buffer and report the host, sample rate, buffer size, MIDI file and whether another application is in the foreground. For comparison, stress renders were checked at 44.1 and 48 kHz with 512-frame blocks; that is not a proven minimum buffer size.
vl_sg_gain in the same section sets the VL/SG worker gain before MU2000 effects. The default is 2.0, which balanced complete local VL and SG songs in listening tests. It does not change MU2000 or 2006LE voices.
xgl_gain sets the S-YXG2006LE fallback voice level before MU2000 effects. The default is 0.75, providing headroom in the tested complete 48 kHz fallback mix without changing VL, SG, or MU voices. It is not a guarantee that every MIDI mix stays below the final output ceiling. The MU engine preserves float headroom while resampling injected effects audio at rates other than 44.1 kHz.
Current limits
Some mixes can reach the final output ceiling. FatPizz reached that ceiling in both the preceding release and the 0.1.3 controller candidate; the controller fix does not change gains or resolve this existing headroom limit. Exact effect levels against physical MU/PLG hardware remain unverified.
Internal audio injection is tested through MU2000 dry, reverb, chorus, system variation, and all four insertions at 44.1 and 48 kHz. VL, SG, and fallback voices can enter an insertion when assigned to their MIDI part; mixed SG output needs exactly one routed part. The earlier small FatPizz CC94 on/off difference was insufficient evidence of correct post-insertion delay. Version 0.2.2 restores that routing through insertions 2-4, with FatPizz listening confirmation but physical-hardware levels still unverified. Shellshk's drum pitch and variation delay were corrected and confirmed in live Foobar playback. A first VL note can still cause an audio-thread setup spike; 96-sample live buffers, long sessions, simultaneous insertion assignments to one part, and physical PLG-board fidelity need more testing.
Licensing
The wrapper is based on S-YXG2026 Hybrid and retains its MIT license. The modified S-MU2000 engine fork credits the original project by tarboh and retains its BSD 3-Clause license and third-party notices. Yamaha firmware, ROMs, tables, and VXD files are not covered by those code licenses and must be supplied separately by users with appropriate rights.