The web audio APIs allow you to generate an audio waveform, process that waveform, and then read the waveform. The article covers how to do this. I'm still a bit confused about why it provides such a good fingerprint, I would have thought it would only vary by browser and version, and then only if the browser updates its audio algorithms. But I'm guessing the APIs interact with the OS in some way to do the processing.