6 puntos por GN⁺ 2025-02-17 | 1 comentarios | Compartir por WhatsApp
  • Descubrimiento del problema: En una laptop nueva se detectó un problema de ruido blanco intermitente en los altavoces. Solo se podía oír en una habitación silenciosa.

  • Análisis de la causa: Tras revisar el estado del audio sink de PulseAudio, se descubrió que no había sonido en estado SUSPENDED, pero en estado IDLE o RUNNING sí aparecía el ruido blanco.

  • El problema de Firefox: Firefox aparecía como el programa que estaba usando el audio sink, y el ruido blanco ocurría aunque ninguna de las pestañas abiertas estuviera reproduciendo sonido.

  • La causa: Se descubrió que el sonido de notificaciones de outlook.office.com era el origen del problema. Cada vez que llegaba un correo, comenzaba el ruido blanco, y solo se detenía al recargar la pestaña o reiniciar Firefox.

  • Consumo de batería: Cuando aparecía el ruido blanco, aumentaba el consumo de CPU y batería.

  • Intento de solución: Se intentó resolver el problema desactivando las notificaciones de correo, pero en otros sitios web ocurrían problemas similares.

  • Procesamiento de audio en HTML/JavaScript: Hay dos formas de reproducir audio: la etiqueta `` y la API WebAudio. Se confirmó que la causa del problema ocurre al crear un AudioContext.

  • Diferencia entre Firefox y Chrome: Chrome deja de desperdiciar batería/CPU automáticamente después de cierto tiempo, pero Firefox no lo hace.

  • Solución: Se desarrolló una extensión que detiene automáticamente AudioContext y lo reinicia cuando es necesario. No es perfecta, pero funciona lo suficientemente bien.

1 comentarios

 
GN⁺ 2025-02-17
Opiniones de Hacker News
  • Este problema está planificado y es importante. Se resolverá pronto. Pido disculpas porque aún no se ha solucionado por un tema de prioridades. Personalmente, tiene alta prioridad

    • Es más complejo que detener el contexto de audio después de cierto tiempo, pero se puede resolver. Es posible porque otras personas ya lo han hecho. Estoy dispuesto a aceptar compromisos
    • Fuente: implementador de Firefox y editor del estándar de la Web Audio API
  • Un sitio web que abre un contexto de audio y no reproduce nada probablemente esté haciendo detección de bots

    • Otros motores de navegador y sistemas operativos implementan el procesamiento de audio de forma diferente. Si reproducen un sonido totalmente inaudible y luego lo vuelven a grabar, se genera una firma
    • Esa firma puede usarse para verificar si el navegador está mintiendo sobre su user agent, si se está ejecutando en modo headless o si no es un usuario real
  • Me pregunto si el mismo problema también ocurre en dispositivos Android

  • Este ruido blanco me volvió loco durante mucho tiempo, pero no pude rastrearlo

    • No aparece el ícono de "reproduciendo" en la pestaña, y silenciar la pestaña tampoco detiene el ruido
    • Incluso si silencio Firefox con el mezclador de volumen de Windows, el ruido no se detiene
    • Edit: para los usuarios de escritorio, que el ruido blanco siga iniciándose y deteniéndose es extremadamente molesto
  • Cuando la salida queda inactiva, la señal digital SPDIF pierde la sincronización. Cuando empieza la reproducción, tarda un tiempo en volver a sincronizarse, y se pierden los primeros segundos del audio. Escribí un programa que mantiene la salida abierta sin volcar datos en la línea para evitar que la salida quede inactiva

    • En una laptop, el ahorro de energía es más importante
  • Esto podría explicar un problema en Android Firefox, donde a veces mi teléfono consumía 10 GB de datos al día. Un sitio de noticias reproducía audio y recargaba anuncios repetidamente, y la pestaña no entraba en modo de ahorro de energía por el audio. Tuve que cambiarme a Chrome por los cargos recurrentes de datos

  • En Chromium, el código que maneja esta interrupción está aquí

    • Básicamente, después de detectar unos 30 segundos de silencio, cambia de la sincronización compatible con el dispositivo de audio del SO a una sincronización nula
    • Nota: como usa un reloj distinto al del dispositivo de audio, cuando el contexto finalmente se usa puede haber distorsión en ciertos tonos. La solución es que el sitio use la API de suspend/resume mencionada en el artículo
  • También encontré un problema parecido en macOS (consumo de energía inducido por audio, sin ruido blanco)

    • En este momento, coreaudiod en mi Mac está usando el 20% del CPU aunque no esté reproduciendo nada. Pienso cambiarme a otro navegador hasta que se resuelva este problema, pero no quiero abandonar Firefox
    • Actualización: parece ser un bug relacionado, pero diferente
  • Este problema corrigió la primera página de https://www.dr.dk/

  • No sé bien cómo está implementado audioContext, pero es muy inteligente y dinámico. Reproducir un sonido de notificación es como dibujar SVG con D3. Me pregunto si existe algún hook de serviceWorker en una API más eficiente para registrar tareas repetitivas simples, como un manejador de notificaciones