
Gong
A struck gong voice with a late shimmer.
Engine preview
VST3
About
A gong is not a big bell, and it is emphatically not a bar. Two of its most recognisable behaviours are nonlinear, they depend on how hard you hit it, which is why a linear modal bank, the technique behind the Gamelan module here, cannot produce them at any setting. This instrument is built around those two behaviours rather than around a partial table.
The first is bloom. Fletcher and Rossing's account of the tam-tam (and Legge and Fletcher's measurements behind it) describes a strike putting its energy into the low modes, after which tension and shear coupling at the hammered bumps cascade that energy UPWARD into the high modes over hundreds of milliseconds to seconds. The shimmer therefore swells after the attack instead of decaying from it. Because it is a nonlinearity it is amplitude-dependent: a quiet strike barely blooms, and a soft beater blooms hardest of all, because it puts its energy exactly where the cascade can find it.
The second is pitch glide. The 2018 JASA paper on internal resonances in Chinese gongs measured what every opera percussionist already knows: a large flat-centred daluo hardens with amplitude, so it enters sharp and sags down as it decays, while the small convex xiaoluo softens, so it enters flat and slides up. The depth scales with how hard you hit, and several modes glide with the fundamental moving most. Motion, Depth and Settle expose the full contour while the selected plate still decides its direction.
The third instrument worth naming is the Balinese gong ageng wadon, whose lowest four partials were measured by Krueger and colleagues at 93.8, 187.5, 281.3 and 375 Hz, near-integer harmonics, unlike any bar in a gamelan, with a two-and-a-half hertz ombak beating between closely spaced hammered modes. That is why it sounds pitched where a tam-tam sounds like weather.
The playable panel uses a Web Audio implementation of the same gong model as the portable restricted-TypeScript engine. Offline renders are checked across the TypeScript reference and compiled browser/plugin lanes; the browser package remains a preview until its persistent realtime voice interface is certified.
System requirements.
The downloadable Gong release supports the hosts and systems listed below.
- VST3macOS · arm64
Works in Ableton Live, Reaper, Cubase, Studio One, Bitwig and FL Studio.
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.gong v0.0.0
- Built at
- Closure hash
- 1535d0fe5922…
- Toolchain
- scriptc 64acce1ae3b8…
- moduleToolchainDist c621ffab721d…
- pluginShellKitRuntime bca003784692…
- faceShellGeneration 8533207ab81f…
- uiPreservation cd28dbd7e3d6…
- packagerVersion 3
| Format | Result | Download |
|---|---|---|
| Browser package (JS) | Builtweb bundle sha256 f09e8e8dd979… · 842 KB | Built, but no downloadable archive was recorded. |
| Browser package (WASM) | Builtweb bundle sha256 75bf7046028b… · 2.0 MB | Built, but no downloadable archive was recorded. |
| VST3 | Builtdarwin-arm64Steinberg validator + VST3 host render: passed bundle sha256 1a45a74f9792… · 2.2 MB | CodexGong-vst3-darwin-arm64.zip archive sha256 8fa610d4fcdd… · 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.
Presets
Start from a named sound, then adjust the instrument to make it yours.
Popular presets for Gong
Open a sound shared by the community, then play it in this module.
Found in collections

Signal graph.
ExperimentalMigration fallback: approximated from parameter groups, not a runtime wiring diagram.
How it works.
Each strike starts as a shaped contact-force pulse, not a noise burst. Mallet hardness sets its nominal length, then the played pitch scales it within a 1.5 to 14 millisecond range: a higher note gets a shorter contact so the pulse cannot cancel its own modal excitation. A small filtered roughness residual can still ride on the pulse. The duration and pulse shape set the excitation bandwidth, so a compliant head reaches mostly low modes while a rigid head wakes the whole bank. That force drives an impulse response synthesised for the selected gong, pitch, position and velocity.
Bloom is baked into the IR as an amplitude split. Each mode gets a fraction of its energy marked as arriving late, rising toward zero to one over the bloom time while the mode's own exponential decay runs underneath; the product of a rising and a falling term peaks after the attack, and that peak is the swell. The fraction ramps with position in the mode bank, so the fundamental speaks immediately and the top of the bank arrives last. It is driven by bloom amount times the beater's coupling times velocity SQUARED, which is what makes it a nonlinearity rather than a knob: at a third of full velocity the drive is under a tenth.
Glide is a per-mode exponential detune with a one-over-one-plus-mode falloff, so the fundamental moves most and the body does not sound like a tape-speed bend. Motion scales the recipe behavior, Depth bounds the initial offset, and Settle controls its time course. The renderer integrates that contour to phase, so every affected mode starts sharp or flat and converges on its nominal frequency instead of jumping between pitches.
Because both effects depend on velocity, an IR is only reusable for strikes of similar force, so velocity is quantised into four buckets and the bucket is part of the cache key alongside note, gong, beater, position, size and every timbre parameter. Level still follows continuous velocity, so dynamics are smooth and only timbre steps. Each strike is a one-shot whose open duration grows from 2.5 to 8.5 seconds with velocity, followed by the Tail Fade; voices are capped at six with oldest-first stealing and a nine-second resource cap.
Goes well with.
Gamelan
Modelled bronze instruments with flexible tuning.
Space Mini
Convolution reverb: eight synthesized spaces, twenty-five real cabinets.
OSC Mini
A compact subtractive synth for learning the signal path.






