The Usual Suspects

Digitally Preserving Classic Synthesizers through Emulation

██╗  ██╗ ██████╗ ██╗    ██╗    ██╗████████╗
██║  ██║██╔═══██╗██║    ██║    ██║╚══██╔══╝
███████║██║   ██║██║ █╗ ██║    ██║   ██║
██╔══██║██║   ██║██║███╗██║    ██║   ██║
██║  ██║╚██████╔╝╚███╔███╔╝    ██║   ██║
╚═╝  ╚═╝ ╚═════╝  ╚══╝╚══╝     ╚═╝   ╚═╝
██╗    ██╗ ██████╗ ██████╗ ██╗  ██╗███████╗
██║    ██║██╔═══██╗██╔══██╗██║ ██╔╝██╔════╝
██║ █╗ ██║██║   ██║██████╔╝█████╔╝ ███████╗
██║███╗██║██║   ██║██╔══██╗██╔═██╗ ╚════██║
╚███╔███╔╝╚██████╔╝██║  ██║██║  ██╗███████║
 ╚══╝╚══╝  ╚═════╝ ╚═╝  ╚═╝╚═╝  ╚═╝╚══════╝

How the Emulator Works

Gearmulator is not a software synthesizer — it is a hardware emulator. Rather than recreating synth algorithms in new code, we emulate the original integrated circuits (DSPs, microcontrollers) at the chip level and run the original, unmodified firmware from the real hardware. The result is an emulation that produces bit-exact output compared to the original device.

This page explains the technical architecture that makes this possible and how the different components interact.

The Emulated Device

At the core of each plugin is a virtual copy of the original hardware:

This means the emulated device behaves identically to the real hardware, including any quirks, bugs, or undocumented behavior present in the original firmware. We cannot add new features to the synthesizer engine itself, because that would require changing the firmware. Our goal is exact reproduction, not enhancement.

The User Interface as a MIDI Controller

The plugin’s graphical interface is not directly connected to the synthesis engine. Instead, it operates as a MIDI controller — exactly like a hardware control surface would interact with the real synthesizer:

This architecture means the UI and the emulated device are fully decoupled. The device does not know or care whether it is receiving MIDI from our editor, a DAW, or an external MIDI keyboard — it processes everything the same way.

Custom MIDI Extensions

While standard MIDI covers parameter changes and preset management, the original hardware has features that were never designed to be communicated over MIDI — things like LCD screen content, LED states, and front panel indicators. To bridge this gap, we use custom SysEx messages that extend the communication between the emulated device and the editor:

These custom messages are emulator-only extensions — they are not part of the original MIDI protocol of any device and are never sent to the DAW or external MIDI ports.

Preset Management

On the original hardware, presets are stored in ROM or flash memory and loaded into an edit buffer when selected. The edit buffer is the working copy that the DSP uses to produce sound.

In the emulator, the Patch Manager takes a different approach for most emulations:

MIDI Routing Matrix

A MIDI routing matrix controls how MIDI events flow between four endpoints:

Endpoint Description
Device The emulated synthesizer hardware
Editor The plugin’s graphical user interface
Host The DAW (for automation, MIDI input from tracks)
Physical External MIDI ports (hardware controllers, other devices)

The matrix allows selective routing of different MIDI event types (notes, CCs, SysEx, program changes, etc.) between any combination of these endpoints. For example:

Internal messages (LCD content, LFO phases, LED states) are routed exclusively between Device and Editor and are never forwarded to the Host or Physical ports.

Users can customize the routing matrix to fit their setup — for example, enabling physical MIDI input to control the emulation from a remote MIDI controller, or enabling physical MIDI output to drive external hardware alongside the emulation.

Rendering

The plugin UI is built with JUCE as the audio plugin framework and RmlUi as the UI rendering engine. RmlUi uses an HTML/CSS-like markup language to define the interface layout and styling:

Summary

┌─────────────────────────────────────────────────────────┐
│                      DAW (Host)                         │
│                    MIDI / Automation                    │
└──────────────────────┬──────────────────────────────────┘
                       │
              ┌────────▼────────┐
              │  MIDI Routing   │◄────── Physical MIDI Ports
              │     Matrix      │
              └───┬─────────┬───┘
                  │         │
       ┌──────────▼──┐ ┌───▼──────────┐
       │  Emulated   │ │   Editor UI  │
       │   Device    │ │  (JUCE +     │
       │             │ │   RmlUi)     │
       │ ┌─────────┐ │ │              │
       │ │   DSP   │ │ │  Knobs,      │
       │ │Firmware │ │ │  LCD, LEDs,  │
       │ └─────────┘ │ │  Patch Mgr   │
       │ ┌─────────┐ │ │              │
       │ │  MCU /  │ │ └──────────────┘
       │ │  Host   │ │
       │ │Interface│ │
       │ └─────────┘ │
       │     ▼       │
       │   Audio     │
       │   Output    │
       └─────────────┘

The key insight is that everything runs through MIDI. The emulated device is a black box running original firmware — the editor talks to it in exactly the same language that the real hardware understands. This is what makes the emulation authentic: we are not approximating the synthesizer’s behavior, we are running the actual code that produces it.