Signal

Audio base latency

Reads AudioContext.baseLatency, the OS audio stack's reported time gap between when audio is dispatched and when it begins playing. Distinct from the main audio DSP signal.

Reviewed

Tier 1 engine

What it measures

baseLatency is a property on the live AudioContext (not OfflineAudioContext) that returns the latency in seconds the audio output adds beyond the destination's inherent latency. The number reflects the browser's default output buffer size, the OS audio driver's reported latency, and whether the OS is using a low-latency or default audio path.

Typical values: iOS Safari 17 returns ~0.005 (5 ms), macOS Safari 0.005 to 0.012, Android Chrome 0.02 to 0.06 (varies widely by device), Windows Chrome ~0.02 with WASAPI shared mode.

Distinct from the main audio signal

The existing audio signal uses OfflineAudioContext to fingerprint DSP math output (oscillator → compressor → sample sum). OfflineAudioContext has no baseLatency property. This signal uses the live AudioContext purely to read the latency metadata, capturing the OS-side audio pipeline rather than the DSP math.

Both signals carry complementary entropy. Two browsers on the same Mac return different baseLatency values because their Web Audio implementations choose different default buffer sizes; the DSP-output hash also differs because Blink and WebKit use different sample-precision rules.

Confidence rules

ConfidenceTrigger
normalisSafariOrMobile() admits the UA, AudioContext available, baseLatency is a finite number
absentisSafariOrMobile() rejects (Chromium / Firefox desktop)
absentAudioContext / webkitAudioContext both unavailable
absentConstructor threw or baseLatency was non-finite

Things worth knowing

  • The collector awaits context.close() in a finally block so the OS audio handle is always released, even on absent paths. No resource leak under any failure mode.
  • Context auto-suspend on iOS Safari does not affect baseLatency reads. The property is readable in 'suspended', 'running', and 'closed' states per the Web Audio spec.
  • Brave Standard Shields does NOT farble baseLatency (it farbles DSP output samples but not the metadata).
  • Firefox resistFingerprinting is rejected by the UA gate anyway; desktop Firefox returns absent.
  • Real device target: total timeMs under 5 ms including OS handle release.
  • Neither FingerprintJS nor Thumbmark collect this signal directly. It's a net new entropy axis we add on top of competitor parity.

Last reviewed 2026-06-04