← All modules
AvailableInstrument

Kalimba

Two modelled tine instruments: kalimba and music box.

Engine preview

VST3

About

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.

System requirements.

The downloadable Kalimba release supports the hosts and systems listed below.

  • VST3macOS · arm64

    Works in Ableton Live, Reaper, Cubase, Studio One, Bitwig and FL Studio.

Version 0.1.0

Build evidence

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.

Module
music.codex.kalimba v0.1.0
Built at
Closure hash
6cd8175cecdc…
Toolchain
  • scriptc 64acce1ae3b8…
  • moduleToolchainDist c621ffab721d…
  • pluginShellKitRuntime bca003784692…
  • faceShellGeneration 8533207ab81f…
  • uiPreservation cd28dbd7e3d6…
  • packagerVersion 3
Build result and download for each format
FormatResultDownload
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 UnitNot 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
CLAPNot 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 appNot 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.

Presets

Start from a named sound, then adjust the instrument to make it yours.

InitClassic KalimbaBuzzy MbiraSoft ThumbDeep Marimbula-ishWide LullabyDream BoxAntique Music BoxToy Ballerina

Signal graph.

Experimental

Migration fallback: approximated from parameter groups, not a runtime wiring diagram.

How it works.

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.

Goes well with.

Preview

Handpan

Nine tuned steel notes, with no extra tenth note.

Preview
Preview

Gamelan

Modelled bronze instruments with flexible tuning.

Preview
Preview

Tines

A pickup-position model for tuned tine voices.

PreviewNot built for macOS, Windows or Linux