Bug Fixes
Fixed OpenWurli stuck notes when re-triggering the same key while sustain pedal is held — deferred note-off counter was a boolean flag, losing track of multiple releases
Fixed OpenWurli MIDI panic (CC 123) not clearing sustain pedal state — sustained notes could remain stuck after All Notes Off
Improvements
DX7: added pitch bend support — uses patch PB range when set, defaults to +/- 2 semitones when patch has range 0
DX7: added mod wheel support — uses patch mod sensitivity when set, defaults to vibrato when sensitivity is 0
DX7: aftertouch, breath controller, and foot controller now delivered to firmware via sub-CPU protocol
Improvements
OpenWurli 0.3: melange-generated 12-node DK preamp circuit solver replaces analytical DkPreamp — closer match to Wurlitzer 200A preamp nonlinearity
OpenWurli 0.3: Twin-T circuit tremolo oscillator replaces sine LFO — fixed ~5.6 Hz rate matching real hardware (tremolo rate parameter removed)
OpenWurli 0.3: recalibrated post-speaker gain from +13 dB to +10.5 dB to match Brad Avenson's 2–7 mV measurement
OpenWurli 0.3: speaker tanh saturation bypassed at character=0 to prevent nonlinear coloration on polyphonic ff chords
OpenWurli 0.3: removed unused filter classes (OnePoleHpf, OnePoleLpf, TptLpf, DcBlocker)
Replaced libresample with Speex resampler (quality 5) — SNR improved from 75 dB to 107 dB at the same CPU cost
Added Disk Operations backup/restore on None machine core
Bug Fixes
Fixed OPL3 preset navigation switching bank instead of stepping through patches
Fixed Standalone preset not sounding on project reopen — deferred sysex resend was never triggered because the Standalone host provides no BPM transport
Fixed AU setCurrentProgramStateInformation overwriting DX7 voice bank RAM on state restore
Improvements
Updated firmware-missing dialogs to reference official ROM filenames: Virus TI asks for firmware.bin, MicroQ for mq_2_23.mid, XT explains that two 128 KB IC dump .bin files are required
Firmware-missing dialog now triggers automatically on state restoration when ROM is not found
Replaced M_PI with juce::MathConstants in SFZero sinc resampler for cross-platform compatibility
Improvements
Enabled filter coefficient interpolation in libresample for cleaner sample rate conversion on non-integer ratios (e.g. DX7 49096→44100 Hz)
Bug Fixes
Fixed crash/freeze on plugin unload when GUI was opened — editor timers are now stopped before destruction
Fixed MIDI clock drift causing arpeggiator to go out of sync
Improvements
Added Virus preset converter for C→B/A downgrade
Shift+< > navigation to jump between bank folders
Synth core listing sorted alphabetically
Waldorf XT bank SingleDump redirected to edit buffer for immediate playback
GUI window size now persisted in settings.xml across all instances
Bug Fixes
Fixed OpenWurli upper register metallic plink and ringing harmonics
Fixed high CPU usage caused by libresample filter parameter regression
Fixed crash on macOS Mojave by disabling PMR
Fixed auto-slice count not resetting when loading a new sample
New Hardware Cores
Wurlitzer 200A — physical model piano via OpenWurli, ported from ~3,000 lines of Rust to C++ and integrated directly into the JUCE plugin framework. OpenWurli models the tine, pickup, and tone bars of the classic electric piano with per-voice physics — a wonderful open-source instrument we are deeply grateful to bring inside Retromulator
Yamaha OPL3 — FM synthesis via Nuked OPL3 v1.8 cycle-accurate emulation by Nuke.YKT, with SBI instrument loading, folder-based bank browsing, and zip import support
Improvements
OpenWurli settings panel with live parameter editing via combo and navigation pill
Akai S1000 browse folder mode with auto-slice drum mapping and state persistence
Akai S1000 ISO/BIN/CUE disk image loading
CC20 global tuning support with auto-slice and tuning state recall
Import/Export/Delete and drag & drop support for all cores
Engine author credits in synth selector
Bug Fixes
Fixed DX7 AU: preset changes after project reload now sound correctly — Logic Pro floods CC100/CC101 (RPN) into the DX7 serial RX buffer every block; the buffer is now flushed on bulk voice dump receipt and CC100/CC101 are blocked at input, ensuring Program Change bytes are not delayed or lost
Fixed DX7 AU: switching synth type to None and back to DX7 no longer produces silence
Fixed DX7 pitch being 2 semitones too low
Fixed DX7 preset navigator resetting to position 1 after project reload when the bank file path was not yet restored
New Hardware Cores
Akai S1000 sampler — SF2, SFZ, ZBP, and ZBB sample bank playback via the SFZero v3.0.0 MIT-licensed engine with 8-point sinc interpolation, extended SFZ/SF2 opcode support, discoDSP Bliss sampler format (.zbp/.zbb), MIDI CC support (mod wheel vibrato, volume, expression, pan), sustain pedal, and pitch bend
Yamaha DX7 — full hardware-level emulation via VDX7 of the Hitachi HD6303R sub-CPU, Yamaha YM21280 EGS, and YM21290 OPS chip set with 16 KB firmware ROM and 32 KB factory voice data
Improvements
JP-8000 .pfm performance bank loading support
SysEx preset and bank export with embedded patch names
Virus ABC/TI sysex cross-detection on patch import — loads ABC patches into TI and vice versa
Nord Lead 2X sysex patch name support expanded from 10 to 20 bytes with backward compatibility
Per-synth remembered file chooser directory persisted across sessions
Hardened runtime with JIT entitlement for macOS code signing
DSP thread stack increased to 64 MB for stability
AAX plugin format support
Bug Fixes
Fixed sysex hang when using external patch editors
Fixed Linux build: ptypes semaphore shadowing, POSIX compatibility, and GNU extensions
Fixed Windows data folder path corruption on sysex file load
Fixed Standalone last used MIDI device not being remembered across sessions
Resolved all compiler warnings across the codebase
Retromulator 1.0 is the initial release of DiscoDSP's hardware synthesizer emulation plugin. The virtual analog synths run on a cycle-accurate Motorola DSP 56300. Supported synths include the Access Virus ABC/TI, Waldorf MicroQ, Waldorf XT, Nord Lead 2X, and Roland JP-8000 — available on macOS, Windows, and Linux as AAX, AU, VST3, and Standalone. Built on Gearmulator, an open-source synthesizer emulation project by the dsp56300 team.
Hardware Cores
Access Virus ABC and TI emulation with sysex patch loading and ROM preset extraction to bank combo
Nord Lead 2X (N2X) emulation with per-program sysex navigation, edit buffer patch support, and output level correction by summing DSP A and DSP B voices at full scale
Roland JP-8000 (JE-8086) emulation with ROM preset extraction, patch browsing, multi-performance bank loading, and AU MIDI latency fix running at 44100 Hz
Waldorf MicroQ and XT emulation via dsp56300 cycle-accurate DSP engine with folder-per-bank ROM loading
SRC (sample rate conversion) with high-quality Rolloff 0.97 / Beta 9 settings
Firmware & ROM Management
Browse dialog accepts .bin, .mid, and .zip files; ZIP archives are extracted flat to the ROM folder with automatic multi-synth detection — all recognised firmware files are saved in one pass
Required ROM files per synth (filename is not checked — any file of the correct size and content is accepted):
Virus ABC/C — virus_c.bin (512 KB)
Virus TI — virus_ti.bin (6–9 MB)
Nord Lead 2X — nord_lead_2x.bin (512 KB)
Roland JP-8000 — jp8000.bin (512 KB); can be assembled automatically from 8 original firmware MIDI dump files
Waldorf MicroQ — micro_q.bin (512 KB); can be assembled automatically from the original firmware MIDI dump
Waldorf XT — xt.bin (256 KB); can be assembled automatically from two 128 KB IC dump files
Assembled ROM binaries are written to the ROM folder and source MIDI/IC dumps deleted, so subsequent launches load instantly from a single .bin
Firmware-missing browse flow on synth type change with synth-specific instructions
Per-synth patch name extraction and bank/program combo selectors
Plugin & Standalone
AAX, AU, VST3, and Standalone plugin formats with DAW state persistence
Resizable editor window with aspect ratio enforcement and in-editor corner resizer for AU host resize support
Window size persists across DAW sessions
DAW notified of state changes on preset and synth updates