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