About this game Two Beat
Development notes
Songs as code
There are no recordings. One shared module builds each song from a key, a chord progression, sections and a seed, and the page plays it with WebAudio. The server runs the same module, so it can rebuild the exact chart for any ranking. Canon Variations uses a fixed score so its theme is never randomized, and I appended the jangdan tracks after the first five so existing charts and records stayed unchanged.
One clock for sound, input and picture
The browser's audio clock advances in steps of several milliseconds. I follow the top of those steps, subtract the reported output latency, and place each press on that clock at the moment the event fired; gamepads are read every 4 ms. In headless Chrome, frame-to-frame jitter fell from 2.65 ms to 0.05 ms. I also swapped the volume compressor, which delayed every sound by 6 ms, for a zero-delay soft clipper.
Re-judging the raw input
Ranked runs once sent already-judged timing errors, and a believable spread of invented errors could reach S+. Now the page sends only press and release times per lane, and the server re-runs the same judging code; the result screen shows that score. This can't prove a person played, so runs of 30+ hits with a timing spread under 4 ms are rejected.
Updated: