Handpan
Nine tuned steel notes, with no extra tenth note.
Two modelled tine instruments: kalimba and music box.
Engine preview
VST3
A kalimba key and a music box tooth are the same object. Both are a short steel bar clamped at one end and free at the other, and both are played by bending that free end aside and letting it go. A bar like that bends in modes at 1, 6.27 and 17.55 times its fundamental, wildly inharmonic, nothing like a string, which is why the attack of a plucked tine is a metallic cluster with no pitch in it at all. The reason the instrument is nevertheless unmistakably pitched is that those upper modes die within tens of milliseconds, so what is left a beat later is very nearly a pure sine. That decay ordering is the sound, and it is what every number in the recipe serves.
Sharing one model between the two is a claim about the instruments, not a saving. What actually separates them is one ingredient each. The kalimba gets buzzers: shells, bottle caps or a bead chain fixed to the board, rattling because the board under them is moving. So the rattle here is built from the note's own decay, the bounces get sparser and smaller as the note fades, and stop well before it does, rather than being noise with an envelope drawn on it. Turn it to zero and the buzzers are off the board: no buffer is rendered and no node is built.
The music box gets the comb and the cylinder. A tooth is not independent, it is cut from the same block as its neighbours and the root they share answers a few cents off, so a struck tooth speaks as a slightly detuned pair and beats slowly. And the movement is audible: a pin drags the tooth aside before it releases it, so the mechanism is heard a few milliseconds AHEAD of the note it produces. Set the mechanism to zero and both the tick and its twelve-millisecond lead disappear together, because a kalimba has nothing between the thumb and the tine.
Neither instrument has a chromatic keyboard. A 17-key kalimba has seventeen tines and an 18-note movement has eighteen teeth, and there is no note in between to reach for, which is exactly why a beginner can improvise on one. So most keys are answered with nothing, the module reports that it declined the strike, and the face shows you that it did. A Chromatic board ships too, for playing the thing as a web instrument; it is honestly labelled as an instrument nobody builds.
This is a preview instrument. The DSP is hand-written Web Audio in the website's stand-in engine, good enough to hear a buzzer coupled to a note, and to hear a mechanism arrive before its pitch, but not a compiled kernel and not covered by any parity claim.
The downloadable Kalimba release supports the hosts and systems listed below.
Works in Ableton Live, Reaper, Cubase, Studio One, Bitwig and FL Studio.
Every row below is a recorded build row or the recorded absence of one. Nothing here is inferred from what this module is meant to support.
| Format | Result | Download |
|---|---|---|
| Browser package (JS) | Builtweb bundle sha256 16ddc9e4bd6f… · 408 KB | Built, but no downloadable archive was recorded. |
| Browser package (WASM) | Builtweb bundle sha256 eb99e3ac44f8… · 2.0 MB | Built, but no downloadable archive was recorded. |
| VST3 | Builtdarwin-arm64Steinberg validator + VST3 host render: passed bundle sha256 cbc420d90e6a… · 2.2 MB | CodexKalimba-vst3-darwin-arm64.zip archive sha256 8be528e9625c… · 2.2 MB · darwin-arm64 |
| Audio Unit | Not built no recorded artifact row for au; native-lane-report.json is absent or records no au row for this module | Not built for macOS |
| CLAP | Not built no recorded artifact row for clap; native-lane-report.json is absent or records no clap row for this module | Not built for macOS, Windows or Linux |
| Standalone app | Not built no recorded artifact row for standalone; native-lane-report.json is absent or records no standalone row for this module | Not built for macOS, Windows or Linux |
Parity
browser-js = browser-wasm = vst3 qualified against their own recorded digests. Not recorded: au, clap, standalone.
Start from a named sound, then adjust the instrument to make it yours.
Migration fallback: approximated from parameter groups, not a runtime wiring diagram.
Each note is a pluck burst convolved with an impulse response synthesised for that exact pitch. The burst is half a millisecond to three and a half of low-passed noise, dominated by a leading impulse, much shorter and brighter than any mallet in this roster, because a release is not a contact: the tine leaves the nail, and the only thing limiting the bandwidth is how cleanly it slips off. The impulse response is a bank of exponentially-decaying sinusoids at the clamped-free beam ratios 1, 6.267, 17.55 and 34.39, with the upper modes down 10 to 26 dB and gone within tens of milliseconds. Convolving one with the other is what excites them, which is why the Pluck control changes the balance of partials rather than only the brightness.
The music box's twin is a second, detuned copy of the whole bank at 1.0035 times each mode, about six cents, a beat every second or so at C6. Rendering both and letting them interfere is real interference between two detuned partials rather than a chorus applied afterwards, the same mechanism the handpan's ding uses for its octave shoulder and modal-ir.ts uses for a gamelan's ombak. It is added at every mode rather than only at the fundamental, because the shared comb root answers the tooth's whole bank.
The buzz layer is rendered from the note's own decay rather than mixed in beside it. Bounce rate and bounce amplitude both follow the fundamental's exponential, so a loud board throws the bead further and sooner and a fading one stops throwing it at all, the rattle dies at twelve per cent of the initial swing, well before the note does. Each bounce is a short ping at a pitch tied to the note, roughened with seeded noise so no two are the same object hitting the same spot. The layer rides the note's own amp gain, so damping the tine stops the rattle exactly as a thumb on the board does. At exactly zero no buffer is rendered, no PRNG draw is taken and no node is built.
The mechanism tick is the one thing here that precedes its note. A cylinder pin drags a tooth aside and then lets go, so the drag, the release click and the gear-train clatter belong twelve milliseconds before the pitch, which is why raising the Mechanism control delays the note rather than adding noise on top of it, and why setting it to exactly zero removes that delay along with the sound. A kalimba has no mechanism at all, so the control is inert on that family by construction rather than by taste.
Which note a key plays is decided before any of that, by the board's tine list. A MIDI note either has a tine or does not; there is no nearest-note substitution, because substituting would turn a seventeen-note diatonic instrument into a chromatic one with duplicates, which is precisely what a kalimba is not. An unmapped key allocates nothing and reports that it made no sound, and the face acknowledges the strike so a silent key reads as a board with no tine there rather than as a bug.
Every random sample in the path, the pluck burst, the rattle, the mechanism, comes from the SDK's seeded generator, forked by the cache key that asked for it, so a given setting always produces the same buffer and a cache hit is the same audio as a fresh render. Impulse responses are cached per family, note and the parameters that change the samples, and dropped wholesale when one of those moves. Voices are capped at twelve with oldest-first stealing, and a voice's nodes are freed on an eight-second tail cap with a short fade, or as soon as a note-off's release has run, whichever comes first.