A standalone app and DAW plugin (AAX / VST3 / AU) that emulates classic hardware synthesizers, samplers, and keyboards by running their original firmware on cycle-accurate CPU and DSP emulators.
| Hardware | Emulation |
|---|---|
| Access Virus A / B / C | Motorola DSP 56300 cycle-accurate |
| Access Virus TI | Motorola DSP 56300 cycle-accurate |
| Akai S1000 | SFZero v3.0.0 sample engine |
| Clavia Nord Lead / Rack 2x | Motorola DSP 56300 cycle-accurate |
| Commodore 64 SID 6581 / 8580 | reSID cycle-accurate |
| General Instrument AY-3-8910 / Yamaha YM2149 | Ayumi + Ym2149Synth voice engine |
| Hammond B3 + Leslie (OpenB3) | setBfree tonewheel and Leslie engine |
| Moog Minimoog Model D (CA-72) | Circuit model from SPICE simulations |
| Oberheim Matrix-1000 | 6809 firmware + CEM3396 voice model |
| Roland JP-8000 (JE-8086) | H8S CPU and 4x ESP ASIC cycle-accurate |
| Roland SC-88 / 88VL / 88Pro / SC-8850 / SC-55mkII | H8/500 and SH-2 cycle-accurate |
| Tracker modules (XM / MOD / S3M / IT) | Fasttracker 2 and Schism Tracker replayers |
| Waldorf microQ | Motorola DSP 56300 cycle-accurate |
| Waldorf Microwave XT | Motorola DSP 56300 cycle-accurate |
| Wurlitzer 200A (OpenWurli) | Physical modeling synthesis |
| Yamaha DX7 | HD6303R + YM21280 EGS + YM21290 OPS (VDX7) |
| Yamaha OPL3 / YMF262 | Nuked OPL3 v1.8 |
Most DSP-based synths require their original ROM firmware to run (not included). ROMs are loaded from the application support folder at runtime. The SC-88 family needs a full image set per board, kept together in its own folder and identified by content. The Matrix-1000 needs its 32 KB system EPROM, and the 64 KB patch EPROM for banks 2 to 9. The microQ can run with an embedded fallback ROM. The Akai S1000, OpenWurli, OpenB3, CA-72, OPL3, AY-3-8910, and Tracker cores are ROM-free.
The Akai S1000 sampler loads SF2, SFZ, ZBP, and ZBB sample banks, as well as Akai ISO/BIN/CUE disk images, via the SFZero MIT-licensed engine with 8-point sinc interpolation, extended SFZ/SF2 opcode support, auto-slice drum mapping, CC20 global tuning, and discoDSP Bliss sampler format.
The Hammond B3 (OpenB3) is the setBfree tonewheel organ and Leslie engine by way of OpenB3, with upper, lower and pedal drawbars, percussion, vibrato and chorus, overdrive, three Leslie cabinets with convolution cabinet bodies, a plate reverb, a keyboard split and .fxp presets in Factory and User banks.
The Minimoog Model D (CA-72) is the CA-72 circuit model by Idle Foundry: every board of a 1972 Model D transcribed into SPICE netlists, with real-time models derived from those simulations. It runs at the host sample rate in LO, HI and ULTRA quality, with a 4x engine for offline renders, and opens its own front panel below the plugin bar. Presets are .fxp files in Factory and User banks, with .fxb bank import and export, and every panel control is a host parameter with a MIDI CC.
The Wurlitzer 200A (OpenWurli) is a physical model of the Wurlitzer 200A electric piano with 64-voice polyphony, tremolo, speaker character modeling, velocity curves, and 2x oversampling.
The Yamaha OPL3 emulates the YMF262 FM synthesis chip (18 channels, 4-operator) using the Nuked OPL3 engine. It loads SBI patch files with bank navigation via folder hierarchy, pitch bend, and voice stealing.
The Commodore 64 SID emulates the MOS 6581 / 8580 chip using the reSID engine with 3-voice polyphony, oldest-voice stealing, and a full 50 Hz macro playback engine (wavetable, pulsetable, filtertable, speedtable). It loads GoatTracker .sng banks and .ins standalone instruments, with live MIDI control via CC 1 (vibrato depth), CC 22 (pitch bend range, 1–48 semitones), CC 64 (sustain pedal), CC 71 (resonance), CC 74 (cutoff), and CC 75 (pulse width).
The AY-3-8910 / YM2149 emulates the 3-channel PSG used in the ZX Spectrum, Amstrad CPC, MSX, and Atari ST using the Ayumi engine, with a voice layer re-implementing the Ym2149Synth firmware: soft volume and pitch envelopes, glide, vibrato, detune, noise delay, and transpose. Voices are controlled via CC 1–11 and patches are stored in a user bank.
The Tracker core plays XM and MOD modules through the Fasttracker 2 replayer, and S3M and IT through the Schism Tracker player with Nuked OPL3 for Adlib instruments. The module owns the transport, driven by MIDI notes: play, stop, and step through a playlist, which can be shuffled or stop at its end. A song ends after five seconds of silence. Folders and .m3u playlists are expanded, the song tempo can follow the host, and a module or a whole playlist renders offline to WAV or MP3 320 with 512 tap sinc interpolation.
The Roland SC-88 family emulates the SC-88, SC-88VL, SC-88Pro, SC-8850 and SC-55mkII GS sound modules, running each board's own firmware on an H8/500 or SH-2 core with the Roland tone generator, effects and filter chips. Tone and drum kit names are read from the board ROM, and the GS parameter map is exposed to the host: per-part programs, variation banks (CC0), tone maps (CC32) and the rhythm part assignment. A standard MIDI file, or a playlist of them, can be played through the board and rendered offline to WAV or MP3 320, from the plugin or from the command line.
The Oberheim Matrix-1000 runs the original firmware on an emulated 6809 board (82C54 timers, 6850 UART, S&H DAC, latches) driving six CEM3396 voice models with BLEP oscillators and 2x oversampling. The firmware calibrates the voices itself at first boot, and the result is kept as a snapshot so later boots are instant. ROM banks 2 to 9 are dumped from the patch EPROM into .syx files with the factory names. Every patch parameter is exposed to the host and mapped to a MIDI CC, and both LFOs can follow the host tempo, MIDI clock or a SysEx tempo.
The standalone app opens modules, .m3u playlists and .mid files handed over by the OS (double click, Open With, or a drop on the dock icon) and switches to the matching core.
The plugin has a MIDI output that can pass on what the emulated core sends (SysEx dumps, parameter changes), switched on with midiOutCoreOutput="1" in settings.xml.
A core can also run without its sound engine, as an editor for the real synth, with editorOnly_<core name>="1" in settings.xml (spaces in the name become underscores).
Retromulator is built on top of the open-source emulation engines from Gearmulator by dsp56300. Gearmulator ships as standalone applications and open-source plugins built with CMake. Retromulator packages the same engines into a polished single-plugin experience using JUCE, with a unified rack-style UI, DAW state persistence, bank/patch browsing, focused on preset playing.
The emulation cores (dsp56300, mc68k, h8s, synthLib and all synth-specific libraries) are from Gearmulator. The DX7 emulation is ported from VDX7, a separate project (see Credits below). The OPL3 emulation uses Nuked OPL3 by Nuke.YKT. The SID emulation uses reSID by Dag Lem. The AY-3-8910 / YM2149 emulation uses Ayumi by Peter Sovietov. The JE-8086 and SC-88 family emulations are by Giulio Zausa. The Tracker core uses the Fasttracker 2 clone replayer by Olav Sorensen and the Schism Tracker player. The Akai S1000 sampler uses the SFZero module, an MIT-licensed JUCE sample engine maintained by discoDSP. The Wurlitzer 200A (OpenWurli) is a physical model fully ported by discoDSP. The Matrix-1000 emulation (6809 board and CEM3396 voice model) is by discoDSP. The synthLib device adapters that wrap each engine (SID, AY-3-8910, OpenWurli, OPL3 and Tracker), the bank and patch handling, the offline WAV / MP3 renderer and the host parameter pool are by discoDSP.
- dsp56300 — DSP56300 emulator, Virus TI / microQ / XT / Nord N2X engines, GPL v3
- All contributors to github.com/dsp56300/gearmulator
- Giulio Zausa — Roland JP-8000 (JE-8086) and SC-88 family emulation
- chiaccona — VDX7, cycle-accurate Yamaha DX7 emulation (HD6303R CPU, EGS, OPS), GPL v3
- Nuke.YKT — Nuked OPL3, cycle-accurate YMF262 emulation, LGPL v2.1
- Dag Lem — reSID, cycle-accurate MOS 6581 / 8580 SID emulation, GPL v2
- Lasse Öörni / Cadaver — GoatTracker
.sng/.insformat reference, GPL v2 - Olav Sorensen — Fasttracker 2 clone, XM / MOD replayer, BSD 3-Clause
- Schism Tracker contributors — Schism Tracker, S3M / IT player, GPL v2
- Peter Sovietov — Ayumi, AY-3-8910 / YM2149 emulation, MIT license
- Timothy Lamb — Ym2149Synth, voice engine and soft envelope firmware, GPL v3
- Dominic Mazzoni — libresample, sinc resampling, BSD 3-Clause / LGPL dual
- Jean-Marc Valin — Speex arbitrary-rate resampler, BSD 3-Clause
- Steve Folta — original SFZero SFZ/SF2 sample player, MIT license
- Leo Olivers — SFZero JUCE module port
- discoDSP — SFZero v3.0.0, 8-point sinc interpolation, Bliss format, extended opcode support, MIT license; synthLib device adapters, bank and patch handling, offline WAV / MP3 render and host parameter pool, Oberheim Matrix-1000 emulation, GPL v3
- Joshua Price — OpenWurli Wurlitzer 200A physical model
- Michele Perrone — OpenB3 Hammond B3 and Leslie, AGPL v3, based on setBfree by Robin Gareus, GPL v2+
- Idle Foundry — CA-72 Minimoog Model D circuit model and front panel, GPL v3 or later; ported to C++ / JUCE by discoDSP
- Laurent de Soras — hiir polyphase IIR halfband filters, WTFPL
JUCE integration, UI, AAX/AU/VST3 plumbing is developed separately.
The emulation engine source code in this repository is licensed under the GNU General Public License v3.0 (see LICENSE.txt). Bundled third-party components keep their own licenses:
| Component | License | File |
|---|---|---|
| Ayumi | MIT | source/ayumiLib/AYUMI_LICENSE.txt |
| CA-72 | GPL v3 or later | source/ca72Lib/LICENSE |
| Fasttracker 2 replayer | BSD 3-Clause | source/trackerLib/ft2/LICENSE |
| LAME MP3 encoder | LGPL v2 | source/lameLib/COPYING |
| libresample | BSD 3-Clause | source/libresample/LICENSE-BSD.txt |
| Nuked OPL3 | LGPL v2.1 | |
| OpenB3 | AGPL v3 | source/openB3Lib/LICENSE |
| reSID | GPL v2 | |
| Schism Tracker player | GPL v2 | source/trackerLib/schism/COPYING |
| SFZero | MIT | Modules/SFZero/LICENSE |
| Speex resampler | BSD 3-Clause |
