Describe a musical idea. Underscore turns it into a live, controllable program you can hear, shape, remix, and embed anywhere.
Music gets used under wildly different demands. A film cue has to stretch to the edit. A game has to react to what the player just did. A stream has to hold for six hours without repeating itself. A record has to sound identical every time. All of it ships as the same thing: a fixed file.
Today’s tools divide that work in the wrong place. A DAW gives you a session you can shape but only you can run. A text-to-audio model gives you a file anyone can play but nobody can change. Stems, plugins, and renders all end up in the same place — a recording, decided once, with the reasoning thrown away.
AI made this more visible, not new. Game audio has faked adaptivity with crossfaded stems for thirty years. Generative musicians have been writing their own runtimes because nothing shipped one.
We think the missing layer is the program: the piece as software that performs itself. Named controls you move while it plays. Source you can read. Lineage when you remix it. One address whether it runs in a browser, a game, or a room. It still renders a file when you need one — the file becomes an export, not the deliverable.
One performance, sealed at export. Nothing inside it to move.
Nothing is running yet. Start the deck at the top of the page.
Three commitments, in the order we have to earn them. The first one is live today.
Say what you want to hear and get back a program that plays it, with controls already named and exposed. No patching, no session to reconstruct, nothing to install before you hear something.
A program’s controls are an interface, so software should drive them. Connect game state, sensor data, or a timeline to any named control and the sound responds while it plays. Remix in language and the lineage survives.
A piece should outlive the session that made it: shareable by link, embeddable in an app or a game, readable as source, and renderable to a file when a fixed asset is genuinely what you need.
Load a program in a web app, read its controls, and drive them from your own state.
const underscore = new Underscore({ apiKey: 'us_pub_...', wasmBaseUrl: '/supersonic/' });
await underscore.init(); // inside a user gesture (autoplay policy)
const program = await underscore.loadSynth('cmp_9xk2', 'held_breath');
await program.play();
// named controls are part of the program
program.params.map(p => p.name);
// => ['warmth', 'drift', 'bloom', 'tenderness', …]
// connect any application state
program.setParam('warmth', enemyCount / 20);
program.setParam('drift', scrollProgress);
The source is part of the program: every piece keeps the synthesis and performance code that makes it sound and move. Flip the player to its Code view to read what you’re hearing.
Install the Web SDK in Vite, Next.js, or a vanilla web project with
npx @underscore-audio/wizard@latest.
Describe what you want to hear. Shape what comes back.
Or start from an idea