MetroBeat schedules short synthesized clicks against AudioContext.currentTime. A small main-thread timer only keeps the near-future queue filled; it is not the audio clock.
Schedule on the audio clock
Queued oscillator starts use Web Audio time, so ordinary main-thread work is less likely to make consecutive clicks uneven.
Scheduling is not acoustic arrival
The operating system, audio interface, speakers, and especially Bluetooth can add output delay after the browser schedules a click.
Treat the visual pulse as guidance
Screen updates run on the main thread and may be delayed by rendering, power saving, or a background tab. Listen to the click when practising timing.
Reduce avoidable output delay
For timing practice, prefer wired headphones or the device speaker, close audio-heavy tabs, and keep the browser in the foreground. These steps do not make hardware latency disappear, but they remove common variables when you compare your notes with the click.