5P by neo 12일전 | ★ favorite | 댓글 1개
  • 문제 발견: 새 노트북에서 스피커에서 간헐적으로 화이트 노이즈가 발생하는 문제를 발견함. 조용한 방에서만 들을 수 있었음.

  • 원인 분석: PulseAudio의 오디오 싱크 상태를 확인한 결과, SUSPENDED 상태에서는 소리가 나지 않지만, IDLE 또는 RUNNING 상태에서는 화이트 노이즈가 발생함을 발견함.

  • Firefox의 문제: Firefox가 오디오 싱크를 사용하는 프로그램으로 나타났으며, 열려 있는 탭 중 소리를 재생하는 탭이 없었음에도 불구하고 화이트 노이즈가 발생함.

  • 원인: outlook.office.com의 알림 소리가 문제의 원인으로 밝혀짐. 이메일을 받을 때마다 화이트 노이즈가 시작되고, 탭을 새로 고치거나 Firefox를 재시작해야만 멈췄음.

  • 배터리 소모: 화이트 노이즈가 발생할 때 CPU와 배터리 소모가 증가함.

  • 해결책 시도: 이메일 알림을 비활성화하여 문제를 해결하려 했으나, 다른 웹사이트에서도 유사한 문제가 발생함.

  • HTML/JavaScript 오디오 처리: 오디오를 재생하는 방법으로 `` 태그와 WebAudio API가 있음. 문제의 원인은 AudioContext를 생성할 때 발생하는 것으로 확인됨.

  • Firefox와 Chrome의 차이: Chrome은 일정 시간이 지나면 배터리/CPU 낭비를 자동으로 중지하지만, Firefox는 그렇지 않음.

  • 해결책: AudioContext를 자동으로 중지하고 필요할 때 다시 시작하는 확장 프로그램을 개발함. 완벽하지는 않지만 충분히 효과적임.

Hacker News 의견
  • 이 문제는 계획되어 있으며 중요함. 곧 해결할 예정임. 우선순위 문제로 아직 해결되지 않았음에 대해 사과함. 개인적으로 높은 우선순위를 가짐

    • 오디오 컨텍스트를 일정 시간 후에 멈추는 것보다 복잡하지만 해결할 수 있음. 다른 사람들이 했기 때문에 가능함. 타협할 준비가 되어 있음
    • 출처: Firefox 구현자 및 Web Audio API 표준 편집자
  • 오디오 컨텍스트를 열고 아무것도 재생하지 않는 웹사이트는 아마도 봇 탐지를 하고 있을 가능성이 있음

    • 다른 브라우저 엔진과 운영 체제는 오디오 처리를 다르게 구현함. 완전히 들리지 않는 소리를 재생하고 다시 녹음하면 서명이 생김
    • 이 서명을 사용하여 브라우저가 사용자 에이전트에 대해 거짓말을 하고 있는지, 헤드리스 모드에서 실행 중인지, 실제 사용자가 아닌지 확인할 수 있음
  • 같은 문제가 Android 기기에서도 발생하는지 궁금함

  • 이 백색 소음이 오랫동안 나를 미치게 했지만 추적할 수 없었음

    • 탭에 "재생 중" 아이콘이 표시되지 않으며, 탭을 음소거해도 소음이 멈추지 않음
    • Windows 볼륨 믹서를 사용하여 Firefox를 음소거해도 소음이 멈추지 않음
    • 편집: 데스크톱 사용자에게는 백색 소음이 계속 시작/중지되어 매우 성가심
  • 출력이 유휴 상태가 되면 디지털 SPDIF 신호가 동기화를 잃음. 재생이 시작되면 다시 동기화되는데 시간이 걸리며, 처음 몇 초의 오디오를 잃게 됨. 출력을 유휴 상태로 두지 않기 위해 데이터를 라인에 덤프하지 않고 출력을 열어두는 프로그램을 작성했음

    • 노트북에서는 에너지 절약이 더 중요함
  • Android Firefox에서 가끔씩 휴대폰이 하루에 10GB의 데이터를 소비하는 문제를 설명할 수 있을 것 같음. 뉴스 사이트가 오디오를 재생하고 광고를 반복적으로 로드하며 탭이 오디오 때문에 절전 모드로 전환되지 않았음. 반복적인 데이터 요금 때문에 Chrome으로 전환해야 했음

  • Chromium에서 이 중단을 처리하는 코드는 여기에 있음

    • 기본적으로 30초 정도의 침묵을 감지한 후 OS 오디오 장치에 의해 지원되는 싱크에서 null 싱크로 전환함
    • 참고: 오디오 장치와 다른 시계를 사용하기 때문에 컨텍스트가 최종적으로 사용될 때 특정 톤에서 왜곡이 발생할 수 있음. 해결 방법은 사이트가 기사에서 언급된 suspend resume API를 사용하는 것임
  • macOS에서도 비슷한 문제를 발견했음 (오디오 유도 전력 소모, 백색 소음 없음)

    • 현재 Mac의 coreaudiod가 아무것도 재생하지 않는데도 CPU의 20%를 사용 중임. 이 문제 해결 전까지 다른 브라우저로 전환할 생각이지만, Firefox를 포기하고 싶지 않음
    • 업데이트: 관련 있지만 다른 버그로 보임
  • 이 문제는 <a href="https://www.dr.dk/">https://www.dr.dk/</a>의 첫 페이지를 수정함

  • audioContext의 구현 방법을 잘 모르지만 매우 똑똑하고 동적임. 알림 소리를 재생하는 것은 D3로 SVG를 그리는 것과 같음. 더 효율적인 API에서 알림 핸들러와 같은 간단한 반복 작업을 등록할 수 있는 serviceWorker 훅이 있는지 궁금함