Syntho Sampler product page
AvailableInstrument

Codex Sampler

The compiled sampler: one kernel, every target.

Browse the sampler banks — every zone map, preset and sample in the format.

You are in the live demo. Included formats, release status, and downloads live on the product page.

About

Two samplers existed in this repository: a Web Audio prototype that could read a sample library's map, and a compiled reader that could ship as a plug-in. The repository's invariant settles which one is the product — Web Audio DSP is reference-only and never a production fallback — so the reader is the sampler, and the prototype's selection semantics were ported into it rather than the other way round.

What a sampler mostly does is choose. Which recording answers this key, which layer answers this strike, which take comes up next so a repeated note does not sound mechanical, what happens when the key is released. Those choices are the engine. Putting them in a compiled kernel means the choice a plug-in makes and the choice the browser makes are the same choice, provably, rather than two implementations that agree until they do not.

That proof is the point of the gate: twelve scenarios, five lanes — the Node oracle, the ScriptC LLVM archive, the ScriptC C-emission archive, a repeat run, and the wasm32-wasi reactor — compared byte for byte, with behavioural assertions alongside, because byte parity alone would also be satisfied by a kernel that ignored every feature it claims.

Round robin is deterministic here, which is a deliberate departure from the sampler engines it takes after. A clock- or Math.random-seeded selector cannot pass a byte-parity gate at all, so takes advance from a pure integer generator seeded per group. The randomness is real to a player and reproducible to a test.

Some things are refused rather than approximated. Legato is rejected when a bank declares it, with its own return code, because there is no legato axis in the program model; an out-of-range round-robin take is refused rather than wrapped, because a bank whose 33rd take quietly became take 1 would be a plug-in playing the wrong sample. A missing algorithm keeps its content unsupported; it never authorizes a different implementation.

System requirements.

The downloadable Codex Sampler release supports the hosts and systems listed below.

  • VST3macOS · arm64

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

Version 0.0.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.sampler v0.0.0
Built at
Closure hash
d91c0bb48400…
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 fdd09a001d73… · 803 KB

Built, but no downloadable archive was recorded.
Browser package (WASM)
Builtweb

bundle sha256 34b5adeeeb06… · 2.0 MB

Built, but no downloadable archive was recorded.
VST3
Builtdarwin-arm64Steinberg validator + VST3 host render: passed

bundle sha256 453acae9fe42… · 3.5 MB

CodexSampler-vst3-darwin-arm64.zip

archive sha256 e886bb2bce8c… · 3.5 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.

InitDefaultSoft PadLong TailOctave Down

Signal graph.

Experimental

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

How it works.

A bank is a `codex-sound-pack/v1` manifest plus its instrument document and its PCM. The build interns the samples into one contiguous arena and emits a flat zone table; nothing about the map is re-derived from the audio at runtime.

Loading a bank is a non-realtime operation. The host writes the arena, then declares each zone with one `set_zone` call carrying the row's fields verbatim, then plays. The render callback that follows allocates nothing, takes no lock, performs no I/O and calls back into no JavaScript.

Every new zone field is validated with a distinct return code rather than clamped, so a build or ABI mismatch says which fact was wrong instead of quietly playing something else. Loop points are rebased onto the trimmed zone, and a loop that does not survive the rebase is forwarded as no loop — the bank plays as a one-shot rather than being refused outright.

The loop wrap is one integer division rather than a subtract-until-in-range loop. The natural `while` form was correctly rejected by ScriptC's realtime prover, which could not bound its iterations from the types — nothing stopped a tiny loop length and a huge index — so the construct was rewritten rather than the compiler patched.

The same profile builds the native archive and the wasm32-wasi reactor. `verify/browser-wasm-lane.mjs` loads that exact `.lib.wasm` in headless Chromium, drives the `scsrd_` ABI and byte-compares against Node: it proves the artifact executes correctly in a browser engine, and deliberately does not claim AudioWorklet scheduling, which needs a reader-ABI bank-install path in the persistent worklet host.

Goes well with.

Syntho Sampler

A free instrument for playing layered sample libraries.

Free
Preview

Tetra Box

A sixteen-pad drum machine whose whole kit morphs across three faces at once.

Preview
Preview

Granular

A recording split into a playable grain cloud.

PreviewNot built for macOS, Windows or Linux
Preview

Pluck

A physical string model, rendered per note.

Preview