6 points par GN⁺ 2025-02-17 | 1 commentaires | Partager sur WhatsApp
  • 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 état IDLE ou RUNNING.

  • 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.com s’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 AudioContext puis le redémarrer si nécessaire. Ce n’est pas parfait, mais c’est suffisamment efficace.

1 commentaires

 
GN⁺ 2025-02-17
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.

    • C’est plus complexe que d’arrêter le contexte audio après un certain temps, mais c’est faisable. D’autres l’ont fait, donc c’est possible. Je suis prêt à faire des compromis.
    • Source : implémenteur de Firefox et éditeur du standard Web Audio API
  • Un site web qui ouvre un contexte audio sans rien lire fait probablement de la détection de bots.

    • Différents moteurs de navigateur et systèmes d’exploitation implémentent le traitement audio différemment. Si on lit un son totalement inaudible puis qu’on le réenregistre, cela produit une signature.
    • Cette signature peut être utilisée pour vérifier si le navigateur ment sur son user agent, s’il s’exécute en mode headless, ou s’il ne s’agit pas d’un vrai utilisateur.
  • 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.

    • L’icône « en lecture » ne s’affiche pas sur l’onglet, et même en coupant le son de l’onglet, le bruit ne s’arrête pas.
    • Même en coupant le son de Firefox avec le mixeur de volume Windows, le bruit ne s’arrête pas.
    • Édition : pour les utilisateurs desktop, le bruit blanc continue de démarrer et de s’arrêter, ce qui est extrêmement agaçant.
  • 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.

    • Sur un laptop, l’économie d’énergie est plus importante.
  • 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.

    • En gros, après avoir détecté environ 30 secondes de silence, il bascule du sink pris en charge par le périphérique audio de l’OS vers un null sink.
    • Remarque : comme le contexte utilise une horloge différente de celle du périphérique audio, cela peut provoquer une distorsion sur certaines tonalités lorsque le contexte est finalement utilisé. La solution est que le site utilise l’API suspend / resume mentionnée dans l’article.
  • J’ai remarqué un problème similaire aussi sur macOS (consommation électrique induite par l’audio, sans bruit blanc).

    • En ce moment, coreaudiod sur 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.
    • Mise à jour : cela semble être un bug lié, mais différent.
  • Ce problème a corrigé la page d’accueil de https://www.dr.dk/.

  • Je ne connais pas bien la façon dont audioContext est 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 hook serviceWorker permettant d’enregistrer des tâches répétitives simples, comme un gestionnaire de notifications.