Play · Music toy
Hayabox
The consort in a box. Six courtiers, six loops of the same eight bars — wake any of them, in any order, and it grooves. Every voice is synthesised live from data; nothing here was ever a recording.
Twelve loops, synthesised right here from plain data — then the court is yours to conduct.
Tap a courtier to wake or hush them — the change waits for the downbeat. Swap a courtier's mood mid-groove and the trade lands on the same bar line.
Joins that always land
Waking a courtier doesn't play a sound — it schedules one. Every entrance and exit is quantised to the next bar boundary by the engine's LoopDeck, so whatever you mash, the mix only ever changes on a downbeat.
No combination can clash
Every note in the room is A minor pentatonic — a pitch pool with no semitone in it. “Any subset harmonizes” isn't mixing luck; it's a property of the data, proven by the linter in the test suite.
No audio files, anywhere
All twelve loops are synthesised in your browser from plain TypeScript data — the same deterministic renderer the test suite hashes headlessly. What you hear is byte-identical to what the proofs measured.
The seam underneath
A LoopDeck is four calls
Author stems as plain Songs, prove the deck with lintDeck, pre-render, and toggle. Adaptive game music — layers that swell with tension — is the same seam.
const deck = audio.startLoopDeck(stems, { secPerBar });
deck.setStem('herald/call', true); // lands on the next downbeat