Device A
Start with the wired one, or the phone speaker. That is your baseline.
Tap along to a click twice — once on each pair of headphones — and this tells you how far apart your two devices are, in milliseconds. It runs entirely in your browser. Nothing is uploaded, including to us.
Read this before you trust a number. Tapping along to a click measures your audio output delay plus your own reaction time, and no single run can separate the two. So the absolute figure from one run means little. What is genuinely useful is thedifference between two runs: your reaction time barely changes in a minute, so what is left is mostly the devices. That is why there are two slots below instead of one big number.
Start with the wired one, or the phone speaker. That is your baseline.
Now switch to the Bluetooth pair and do it again.
Each result shows a median and a spread. The median is the typical lateness. The spread is how much that lateness wobbles from tap to tap.
This distinction is the whole reason Bluetooth is hard. A fixed delay is solvable: a game can store it and shift its timing to match. A wandering delay is not, because there is no single number to store. Bluetooth typically adds somewhere around 150–250 ms, and it does not hold that figure still. So if your Device B shows a wide spread, that part is not something any game can calibrate away — including ours.
If you want frame-accurate timing, wired wins. That is true of every rhythm game, and we would rather say so than sell you a promise we cannot keep.
Store a separate offset for every output device, and notice when the route changes. Most rhythm games either keep one global offset or offer no calibration at all, which is why switching from your phone speaker to your headphones makes a game feel broken.
“1 Beat: Hit Music Game” is a four-lane rhythm game for iPhone and Android. It remembers the number you just measured — per device, automatically, so you calibrate once per pair of headphones rather than once per session. Free, in development, nothing to download yet.