Audio fingerprint test
The AudioContext fingerprint a script computes from your browser, the samples behind it, and whether it stays the same when rendered again.
Renders a 10 kHz triangle wave through a compressor 3 times with an OfflineAudioContext (silently: nothing is played) and compares the results. Everything runs in this tab; nothing is sent to a server.
Rendering…
How the classic method works
The graph is the one popularized by FingerprintJS's open-source library: an OscillatorNode producing a 10 kHz triangle wave, fed through a DynamicsCompressorNode with fixed settings, rendered for 5,000 samples at 44.1 kHz. The compressor is the interesting part: its gain reduction involves exponentials and logarithms computed in floating point, and the way those are implemented and vectorized differs between browser engines, versions and processors.
The fingerprint is the sum of the absolute values of the last 500 samples, the stretch plotted above. Scripts compare that one number; this page also hashes the whole buffer, which catches differences anywhere in it.
Rendered three times
Offline rendering of the same graph is deterministic, so the test renders it three times and expects three identical buffers. Different buffers mean noise was added after rendering. It also reads the first buffer through both getChannelData() and copyFromChannel(), which have to agree.
The output sample rate shown under Details comes from a separate, live AudioContext and describes your audio device (commonly 44,100 or 48,000 Hz). It is not part of the offline value, but it is one more thing a page can read. The browser fingerprint test runs checks like these across every surface at once.
Related surfaces
The canvas, WebGL, WebGPU and font tests read the other surfaces that describe the machine. For background, see what AudioContext fingerprinting is.
FAQ
What is an audio fingerprint?
A number computed from sound the browser generates but never plays. A script builds a small Web Audio graph, renders it offline with an OfflineAudioContext, and sums or hashes the samples. The floating-point arithmetic in the oscillator and the compressor is done by the browser's audio code on the machine's CPU, and small differences there change the last digits of the result.
Does this play any sound?
No. An OfflineAudioContext renders into memory as fast as it can and is never connected to a speaker. Nothing is recorded either: the test does not use the microphone.
What is a normal value?
It depends on the browser engine, its version and the processor. With this page's code, Chrome 155 on Windows 11 gave 124.04347776696522, with and without GPU acceleration. Many machines share a value, so it groups browsers rather than identifying one; scripts combine it with other surfaces.
Why does my audio fingerprint change on every run?
Because something adds noise to the rendered samples. Rendering the same graph twice is deterministic, so variation means a privacy feature or an extension is altering the output. Some browsers do this on purpose; a browser that changes the value on every read is easy to tell apart from one that does not.
What is the copyFromChannel check?
There are two ways to read a rendered audio buffer: getChannelData(), which returns the samples, and copyFromChannel(), which copies them into an array the page provides. They read the same memory, so they must agree. A tool that adds noise through one of them and not the other leaves them disagreeing, which says that the noise was injected.
Can the audio fingerprint tell two identical computers apart?
Rarely. It reflects the browser build and the processor's floating-point behaviour, which are the same on identical hardware with the same browser version. That is also why it cannot simply be randomized per account without becoming the signal itself.
Related free tools
Canvas fingerprint test
Your canvas hash, and whether it stays the same between reads and in a worker.
WebGL test and fingerprint
Whether WebGL works, the GPU it reports, its extensions and limits, and their hash.
Font fingerprint test
Which fonts a page can detect, and which operating system they point to.
Browser fingerprint test
A few hundred coherence checks on the browser you open it in.
Clearcote puts this into practice
An open-source Chromium with fingerprint control compiled into the engine. A drop-in for Playwright & Puppeteer.
Free for one browser with GitHub. No card.