This is planned, and important, and we'll fix it hopefully soon, it's long overdue. I'm sorry this hasn't happened yet, it's always a game of priorities that can never satisfy everybody on time. It however ranks fairly high on my personal list.<p>As one could imagine it's a bit (read: a lot) more complicated than just pausing the AudioContext after some time of silence, but we'll get it fixed regardless, it's possible because others did it. There are tradeoffs we're willing to do.<p>Source: Firefox implementer of a lot of things around this, editor of the Web Audio API standard.
The websites opening an audio context without using it to play anything are probably doing bot detection.<p>Different browser engines and operating systems implement audio processing differently, so if you play a completely inaudible sound and then record it back (from the API not the microphone) you end up with a signature.<p>You can use that signature to see if the browser is lying about its user agent, running in headless mode, or all sort of other interesting edge cases that are not a real user buying widgets.<p><a href="https://github.com/fingerprintjs/fingerprintjs/blob/3201a7d61bb4df2816c226d8364cc98bb4235e59/src/sources/audio.ts">https://github.com/fingerprintjs/fingerprintjs/blob/3201a7d6...</a>
Wow, this white noise has been driving me crazy for a long time but I could never track it down.<p>The tab doesn't show the "playing" icon, and muting the tab doesn't stop the noise.<p>Even using the Windows volume mixer to mute Firefox doesn't stop the noise.<p>Edit: The addon is actually pretty bad for a desktop user since the white noise starting/stopping constantly is far more annoying.
If the output idles, digital SPDIF signals lose sync. Re-syncing once playback starts is not instant, and you lose the first second of audio or so. I wrote a program that kept open an output withought dumping any data to the line, just to prevent the output from idling.<p>Doesnt make much sense in the context of a laptop though, so energy savings make sense there.
Oh! I think this explains the issue I had on Android Firefox where every so often my phone would randomly consume 10gb/day in data (costing me $stupid on phone bill). I believe a news site was playing audio and was loading new ads on repeat and the tab never went to sleep because of the audio! I had to switch to chrome because the repeating surprise data bills were becoming silly
I've noticed this, or something very similar (not sure if sites are keeping audio contexts open actually, or if this is Firefox-internal, as it also happens on Youtube and other sites not using the Web Audio API) on macOS a while ago too (i.e. an audio-induced power drain, but no white noise): <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1821102" rel="nofollow">https://bugzilla.mozilla.org/show_bug.cgi?id=1821102</a><p>Right now, coreaudiod on my Mac is at 20% CPU with nothing playing whatsoever :( I'm close to switching to another browser until this is fixed, as it's really ruining battery life for me, but I really don't want to give up Firefox over something seemingly so trivial.<p>Update: This seems to be a related but different bug.
The code in Chromium which handles this suspension is here:
<a href="https://source.chromium.org/chromium/chromium/src/+/main:media/base/silent_sink_suspender.h" rel="nofollow">https://source.chromium.org/chromium/chromium/src/+/main:med...</a><p>Basically after detecting silence for 30 seconds or so it switches from a sink backed by the OS audio device to a null sink.<p>Note: Since this uses a different clock than the audio device we have received some reports that when the context is finally used there can be some distortion at specific tones. The workaround is for sites to use the suspend resume API mentioned in the article.
I don't know the ins-and outs of how audioContext is implemented but it's got a lot in there to be very clever and dynamic, playing a notification chime seems like that feels like drawing an svg with D3 instead of img href *.svg. I wonder if there's a serviceWorker hook that could register simple repeatable stuff like notification handlers much lower down on a more efficient API.
Abstraction layers are hard and have bugs. We should probably figure out a way to reduce the number of abstraction layers. Maybe instead of running the software in a virtual machine with an OS abstraction layer (which is itself a shitty OS), it could compile directly to machine-language instructions and interact with your real OS. You could download this once and run it many times.