-
Découverte du problème : sur un nouvel ordinateur portable, un bruit blanc intermittent provenait des haut-parleurs. Il n’était audible que dans une pièce silencieuse.
-
Analyse de la cause : en vérifiant l’état du sink audio de PulseAudio, il a été constaté qu’aucun son ne se produisait en état
SUSPENDED, mais qu’un bruit blanc apparaissait en étatIDLEouRUNNING. -
Le problème avec Firefox : Firefox apparaissait comme le programme utilisant le sink audio, alors qu’aucun des onglets ouverts ne lisait de son, et pourtant le bruit blanc persistait.
-
Cause : le son de notification de
outlook.office.coms’est révélé être à l’origine du problème. À chaque réception d’un e-mail, le bruit blanc commençait, et il ne s’arrêtait qu’en rafraîchissant l’onglet ou en redémarrant Firefox. -
Consommation de batterie : lorsque le bruit blanc se produisait, la consommation de CPU et de batterie augmentait.
-
Tentative de solution : la désactivation des notifications e-mail a été essayée pour résoudre le problème, mais des problèmes similaires se produisaient aussi sur d’autres sites web.
-
Traitement audio en HTML/JavaScript : il existe la balise `` et l’API WebAudio pour lire de l’audio. Il a été confirmé que le problème se produisait lors de la création d’un
AudioContext. -
Différence entre Firefox et Chrome : Chrome arrête automatiquement ce gaspillage de batterie/CPU après un certain temps, mais Firefox ne le fait pas.
-
Solution : une extension a été développée pour suspendre automatiquement
AudioContextpuis le redémarrer si nécessaire. Ce n’est pas parfait, mais c’est suffisamment efficace.
1 commentaires
Avis Hacker News
Ce problème est planifié et important. Il sera bientôt corrigé. Désolé qu’il ne l’ait pas encore été à cause d’un problème de priorités. Personnellement, c’est une priorité élevée pour moi.
Un site web qui ouvre un contexte audio sans rien lire fait probablement de la détection de bots.
Je me demande si le même problème se produit aussi sur les appareils Android.
Ce bruit blanc me rend fou depuis longtemps, mais je n’arrivais pas à en trouver la cause.
Quand la sortie devient inactive, le signal numérique SPDIF perd sa synchronisation. Quand la lecture reprend, il faut du temps pour se resynchroniser, et on perd les premières secondes de l’audio. J’ai écrit un programme qui garde la sortie ouverte sans envoyer de données sur la ligne, afin d’éviter qu’elle ne devienne inactive.
Cela pourrait expliquer un problème occasionnel sur Firefox Android où mon téléphone consomme 10 Go de données par jour. Un site d’actualités lançait de l’audio et rechargeait des publicités en boucle, et l’onglet ne passait pas en veille à cause de l’audio. J’ai dû passer à Chrome à cause des frais de données répétés.
Le code qui gère cette interruption dans Chromium est ici.
suspend/resumementionnée dans l’article.J’ai remarqué un problème similaire aussi sur macOS (consommation électrique induite par l’audio, sans bruit blanc).
coreaudiodsur mon Mac utilise 20 % du CPU alors que rien n’est en cours de lecture. Je pense passer à un autre navigateur jusqu’à ce que ce problème soit résolu, mais je n’ai pas envie d’abandonner Firefox.Ce problème a corrigé la page d’accueil de https://www.dr.dk/.
Je ne connais pas bien la façon dont
audioContextest implémenté, mais c’est très intelligent et dynamique. Jouer un son de notification, c’est un peu comme dessiner un SVG avec D3. Je me demande s’il existe, dans une API plus efficace, un hookserviceWorkerpermettant d’enregistrer des tâches répétitives simples, comme un gestionnaire de notifications.