Work / App · Tool · Performance
Persona
Open
- StudioDesign a sound, layer it, arrange it, export WAV, stems, a preset, or a TypeScript function.Run · soon
- LiveTwo or four decks, a mixer, a sampler and a crate of everything you have played.Run · soon
About
Why from code
A game that synthesises its audio ships no audio files, and every gunshot can be
slightly different from the last, because it is generated rather than replayed.
That is the starting point: you shape a sound from a family (a gun, a bell, a
warp), and export it as a .wav, as stems for a DAW, or as a standalone
TypeScript function that regenerates it at run time.
The generated code is checked rather than trusted. A harness emits every family in every output shape, compiles it, renders both, and compares them sample for sample: 242 voices and 50 layered stacks match to float rounding, and four presets reproduce a game’s shipped voices bit for bit. It caught bugs that type checking cannot.
Live
The Live view turns the same engine into an instrument. Tracks come from the studio, are rolled in the background at the set’s tempo and in a key that fits the other deck (drum & bass, halftime, techno, house), or are your own recordings, whose tempo and downbeat are found on loading.
Everything is quantised to the bar. Real-time controls act on audio already rendered; anything that has to be computed lands on the next phrase. The engine always keeps a phrase ahead.
Built with
TypeScript, the Web Audio API (an offline context used as a deterministic buffer factory), audio worklets and workers, canvas 2D for every view. No framework and no runtime dependency.
Features
- 01
Families, not oscillators
Gun, laser, ricochet, impact, rocket, warp, drive, alert, voice, crackle, buzz, mood, chime. Each one encodes the acoustics of the thing it models, with its numbers exposed.
- 02
Layers on a timeline
Up to six voices per sound, each with gain, pan, rate, fades, repeats, morphs between two settings, and slow motion over its own length.
- 03
Rhythm, generated
Switch on the musical grid and each layer gets a Euclidean pattern: pulses over steps, rotation, density, swing, humanise, accent. Numbers you can sweep while listening.
- 04
Twelve effect stages
Drawn EQ, filter, wavefold, drive, frequency shifter, ring modulator, phaser, flanger, Doppler fly-by, echo, bit-crush and tremolo, per layer and on a master bus.
- 05
Four views on one time axis
Arrangement, spectrogram, waveform and spectrum. You draw EQ curves directly on the spectrum. Live measurements of attack, decay, peak, crest, centroid and tonality.
- 06
Vary, reseed, randomise
A whole stack in one throw, a family of related sounds by nudging every parameter a few percent, or another take with the same shape and different noise.
- 07
Live on two or four decks
Stem pads by role that land on the bar, variations A/B/C, fills, loops, a channel strip with EQ kills, crossfader, bass swap and timed blends, cue to headphones, MIDI learn.
- 08
Nothing loads mid-music
A track's voices are synthesised once in a worker, then every bar is mixed two bars ahead. You never change the present, only the future.
- 09
A set is a few kilobytes
Saving a set writes an event log, not audio. Render WAV replays it offline through the same graph, measured identical to the live output to −71 dB.
Credits
- Design, DSP, code — SVDK