jevstrudel.git / songs / jev / system-one

For agents, on top of README.md, which they read first.

Notes for agents

Stop playback before playing song.js. Its section masks count from cycle 0.

Half-time is written, not tempo-changed. The think sections put the kick on 1 and the snare on 3 at the same setcps. Never change cps mid-song to get the half-time feel: every mask counts cycles, and the sections would drift.

The hook is rendered on Em and must land on Em. samples/sohook is vocoded on e2 e3 g3 b3 e4; the drops and the outro start right after a multiple of 4 bars so the 4-bar Em – C – G – D cycle is on Em there. Moving a section boundary off that grid needs the hook re-rendered on the new chord.

The three loading chimes differ on purpose. Think 1 resolves to E, think 2 is busier and resolves to E, think 3 stops on F# and never resolves (the spec asks for it). They are three masked patterns, not one, all on samples/sowinchime (Windows' chimes.wav, rooted on A5 +8 cents: transpose(-45).speed(.995) makes a written note sound as written). Each last bar decays before beat 4, so a dropout into the drop is silent.

The master postgain is measured, not guessed. Balance the parts first, then set it so the loudest bar peaks at or under −1 dBFS; peaks move about 1 dB between runs (the supersaw's phases), so leave that margin. Measuring in the dev server plays the main tree's samples: a sample changed only in a worktree needs a samples({...}) override pointing at its /@fs/ path in a probe copy.