Overtonium
A 32-partial additive synthesizer laid out like a 32-channel mixer. Every channel is one sine oscillator locked to a harmonic of the played note, and every channel has its own tuning, envelope and modulation.
The control worth reaching for first is TUNE. It sweeps each partial continuously between equal temperament and just intonation. At the just end the partial sits at an exact integer ratio with the fundamental and the whole stack fuses into a single timbre. At the equal end each partial snaps to the nearest 12-TET semitone and the same stack smears into a chord. The factory presets Just Saw and Equal Saw are identical except for that one control, and they sound nothing alike.

- Formats: VST3, AU (macOS), Standalone, LV2 (Linux)
- Platforms: macOS (universal), Windows, Linux
- Framework: JUCE 9
- Licence: AGPLv3. See Licensing
- Page: benjamindehli.github.io/overtonium, built from
docs/ - Listed at: KVR Audio
- By: Benjamin Dehli for Dehli Musikk. Hosts list it under DehliMusikk (manufacturer code
Dhmk, plugin codeOvtn) - Also here: design notes, contributing, architecture, accessibility, security policy, code of conduct
CI builds all three platforms and runs the test suite on each of them on every push, and macOS is the only one where the plugin has been loaded into a host. The Audio Unit and the VST3 pass auval and pluginval at strictness 8 there. Nobody has yet run the Windows or Linux builds in a DAW, so treat those as untried and please report what you find.
Background
This is the fourth instrument in a line, and the first that computes its sound rather than playing it back. The two ideas it is built on both arrived at the same place, sitting at a drawbar organ, and neither of them is really about organs.
Voltage Controlled Cassette Organ came first, in 2023. A Korg CX-3 sampled through cassette tape, every note of every drawbar recorded as its own file. The tape was the point: wow, flutter and random warbles gave the organ a movement like a chorus or a rotary speaker without the fixed rate a modulation effect has. It was recorded to tape twice, which doubled it, and since no tape deck plays back the same way twice the two passes never quite agreed.
Strykebrett came in October of the same year, a sampled Logan String Melody II. Six faders rather than nine drawbars, each setting the level of one octave or one of the voices across a bass and a treble section, and four of them carrying their own envelope and their own LFO. It is not an organ, which is the useful thing about it: the workflow survived being moved onto something else.
EDB-Orgel followed in 2024, keeping the drawbar workflow and putting four digital synthesis types under it instead of an organ.
All three gave a drawbar its own envelope and LFO, which is the first of the two ideas. A drawbar is a partial, and an organ moves them by hand while the note sounds. Nine of them shaped separately already sounds unlike an organ, so thirty-two, each with a full channel of controls, is that idea taken as far as it goes.
The second idea is about where the drawbars are tuned. A drawbar is a harmonic, but an organ has only the twelve notes of the keyboard to build one out of, so each drawbar is put on the nearest one. The second, fifth and eighth are all fifths an octave apart, which means holding a C puts three G's into the sound. A harmonic series does not work like that. The real intervals are whole-number ratios, 2:1, 3:2, 4:3, and apart from the octaves none of them lands on a key. TUNE is that difference turned into a control, and computing the partials is what makes it possible: a sampled one is stuck at the pitch it was recorded at, while a computed one can sit where the organ would put it, at its exact ratio, or anywhere between.
The ancestry is visible in the details rather than only in the shape. DRIFT is the cassette's random warble, one per partial. WOBBLE is the same thing under the whole instrument. The tape echo's two paths, each with its own motor speed and its own random stream, are the double tracking, and TapeEcho::kMinAge exists for the same reason the two tape passes never agreed: a transport that held speed exactly would put the repeat back in mono, and there is no such transport.
All three earlier instruments are sample libraries with a plugin wrapper, sold at Dehli Musikk. This one is free software, and none of their code is in it.
The Adaptive temperament leans on another project of mine, music-utils, a library that names chords from the MIDI notes held. Its list of 125 chord types is what the temperament is tested against: every one, in all twelve keys, has to come out the same however it is played and as pure as it can be.
What is in it
Every channel is a strip, and every strip carries the same twenty-three controls. The captions are named once down the left rather than repeated across all thirty-three, and each channel takes the colour of its interval against the fundamental.
The project page is the place to start, and it has a page each for the parts worth reading about:
- Tuning: TUNE from equal to just, inharmonic stretch, six historical temperaments and an adaptive one on any root, keyboard tracking and per-partial drift
- Controls: every knob on a channel strip, the two-part envelope, LINK for ganging the series, the lamps and meters, and the noise channel
- Effects: the bar above the mixer, from the oscillator character and the wobble through the echo, the reverb and the converter to the five CLIP shapes on the output
- Playing: MPE, legato and glide, the Settings menu, automation with every parameter listed, macros and MIDI Learn
- Presets: the thirty-four that ship, what a preset carries and deliberately does not, switching them with a MIDI program change, and where your own are kept
- Install: which download to take, what to do when a host cannot see the plugin, and building from source
DESIGN.md is the same ground at length, and keeps the reasoning: what each part does, what the alternatives cost, and the measurements behind the numbers.
Building and contributing
You need CMake 3.22 or newer and a C++17 compiler. JUCE is downloaded at configure time.
cmake -B build -DCMAKE_BUILD_TYPE=Release cmake --build build
That build treats warnings as errors, which is what CI does. On a compiler this project has not met, add -DOVERTONIUM_WARNINGS_AS_ERRORS=OFF and it builds anyway.
CONTRIBUTING.md has the rest: per-platform notes, the two test suites, formatting, warnings as errors, how a release is cut and how the project page is served. ARCHITECTURE.md describes how the code is arranged.
Checking for updates
Off unless asked for. The first time an editor opens, the credit line under the wordmark offers to turn the check on, once, and nothing reaches the network unless that offer is taken. Ignoring it costs nothing and it is not asked again. The setting lives under Settings from then on.
With it on, a background thread fetches docs/latest.json from the project page and compares the version in it against this build. If the file names something newer, the credit line says so and clicking it opens the release page. It is a plain GET for one small static file: no identifier, no version, nothing about the machine, and the server it reaches is the same one serving the documentation.
The preference is kept in a settings file beside the presets rather than in the plugin's state. It belongs to the person rather than to a patch, and kept in the state it would be asked afresh by every new instance, which is what a host walking its plugin folder makes dozens of.
There is deliberately no dialog. A plugin cannot tell someone opening it from a host scanning at startup, and a modal in the second case stops the scan.
The release workflow rewrites docs/latest.json as part of publishing, so the feed cannot name a version that was never shipped, and cannot lag one that was.
Licensing
Overtonium is released under the AGPLv3.
That follows from what it is built on. The JUCE framework modules are dual-licensed under the AGPLv3 or a paid commercial licence, and a plugin is a single combined work with them, so the combination has to be conveyed under terms the AGPL allows. Taking the AGPL for this project too is the simplest way to be exactly what it says it is. The network clause the AGPL is known for, section 13, only applies to software users interact with remotely over a network, which an audio plugin is not, so in practice it reads as the GPL does.
If you want to build on this and ship something closed-source, that needs a commercial JUCE licence from the JUCE side and a separate arrangement on this side, since the AGPL does not permit it.
There is no splash screen to worry about. JUCE 6 and 7 had one, and disabling it was the thing that required a paid licence. JUCE 8 removed it, and JUCE_DISPLAY_SPLASH_SCREEN is now ignored with a compiler warning if you define it.
