6 điểm bởi GN⁺ 2025-02-17 | 1 bình luận | Chia sẻ qua WhatsApp
  • Phát hiện vấn đề: Tác giả phát hiện loa trên chiếc laptop mới thỉnh thoảng phát ra tiếng nhiễu trắng. Chỉ có thể nghe thấy trong phòng yên tĩnh.

  • Phân tích nguyên nhân: Sau khi kiểm tra trạng thái audio sink của PulseAudio, tác giả phát hiện rằng ở trạng thái SUSPENDED thì không có tiếng, nhưng ở trạng thái IDLE hoặc RUNNING thì xuất hiện nhiễu trắng.

  • Vấn đề của Firefox: Firefox được hiển thị là chương trình đang sử dụng audio sink, dù không có tab nào đang mở phát âm thanh nhưng vẫn xảy ra hiện tượng nhiễu trắng.

  • Nguyên nhân: Âm thanh thông báo của outlook.office.com được xác định là nguyên nhân của vấn đề. Mỗi khi nhận email, nhiễu trắng bắt đầu xuất hiện và chỉ dừng lại khi tải lại tab hoặc khởi động lại Firefox.

  • Tiêu hao pin: Khi nhiễu trắng xuất hiện, mức sử dụng CPU và pin cũng tăng lên.

  • Thử giải pháp: Tác giả đã cố giải quyết bằng cách tắt thông báo email, nhưng các trang web khác cũng gặp vấn đề tương tự.

  • Xử lý âm thanh trong HTML/JavaScript: Có thẻ `` và WebAudio API là các cách để phát âm thanh. Nguyên nhân vấn đề được xác định là phát sinh khi tạo AudioContext.

  • Khác biệt giữa Firefox và Chrome: Chrome tự động dừng việc lãng phí pin/CPU sau một khoảng thời gian nhất định, còn Firefox thì không.

  • Giải pháp: Tác giả đã phát triển một tiện ích mở rộng tự động dừng AudioContext và khởi động lại khi cần. Dù không hoàn hảo nhưng đủ hiệu quả.

1 bình luận

 
GN⁺ 2025-02-17
Ý kiến trên Hacker News
  • Vấn đề này đã được lên kế hoạch và là quan trọng. Sẽ sớm được khắc phục. Xin lỗi vì vẫn chưa sửa do vấn đề ưu tiên. Cá nhân tôi xem đây là ưu tiên cao

    • Việc này phức tạp hơn so với dừng audio context sau một khoảng thời gian nhất định, nhưng có thể giải quyết được. Người khác đã làm rồi nên hoàn toàn khả thi. Tôi sẵn sàng chấp nhận thỏa hiệp
    • Nguồn: người triển khai Firefox và biên tập viên tiêu chuẩn Web Audio API
  • Một website mở audio context rồi không phát gì có lẽ đang thực hiện phát hiện bot

    • Các engine trình duyệt và hệ điều hành khác nhau triển khai xử lý âm thanh theo cách khác nhau. Nếu phát một âm thanh hoàn toàn không nghe thấy rồi ghi lại, sẽ tạo ra một dấu vân tay
    • Dấu vân tay này có thể được dùng để kiểm tra xem trình duyệt có đang nói dối về user agent, có đang chạy ở chế độ headless hay không, hoặc có phải là người dùng thật hay không
  • Tò mò không biết vấn đề tương tự có xảy ra trên thiết bị Android không

  • Tiếng ồn trắng này đã khiến tôi phát điên từ lâu nhưng tôi không thể lần ra được

    • Tab không hiển thị biểu tượng "đang phát", và ngay cả khi tắt tiếng tab thì tiếng ồn vẫn không dừng
    • Dùng Windows Volume Mixer để tắt tiếng Firefox cũng không làm tiếng ồn dừng lại
    • Chỉnh sửa: với người dùng desktop, tiếng ồn trắng cứ liên tục bắt đầu/dừng lại nên cực kỳ khó chịu
  • Khi đầu ra ở trạng thái nhàn rỗi, tín hiệu SPDIF kỹ thuật số sẽ mất đồng bộ. Khi phát lại bắt đầu, cần thời gian để đồng bộ lại nên sẽ mất vài giây đầu của âm thanh. Tôi đã viết một chương trình giữ đầu ra luôn mở mà không đổ dữ liệu lên line để tránh cho đầu ra rơi vào trạng thái nhàn rỗi

    • Trên laptop, tiết kiệm năng lượng quan trọng hơn
  • Điều này có thể giải thích vấn đề đôi khi Firefox trên Android khiến điện thoại tiêu thụ 10GB dữ liệu mỗi ngày. Các trang tin phát âm thanh, liên tục tải lại quảng cáo, và tab không chuyển sang chế độ tiết kiệm điện vì âm thanh. Tôi đã phải chuyển sang Chrome vì chi phí dữ liệu lặp đi lặp lại

  • Trong Chromium, đoạn mã xử lý việc ngắt này nằm ở đây

    • Về cơ bản, sau khi phát hiện khoảng 30 giây im lặng, nó sẽ chuyển từ sync sink sang null sink do thiết bị âm thanh của HĐH hỗ trợ
    • Lưu ý: vì nó dùng một đồng hồ khác với thiết bị âm thanh, nên khi context cuối cùng được sử dụng có thể xảy ra méo tiếng ở một số âm nhất định. Cách khắc phục là trang web sử dụng suspend resume API được nhắc trong bài viết
  • Tôi cũng phát hiện vấn đề tương tự trên macOS (điện năng bị tiêu hao do âm thanh, không có tiếng ồn trắng)

    • Hiện tại coreaudiod trên máy Mac của tôi đang dùng 20% CPU dù không phát gì cả. Tôi định chuyển sang trình duyệt khác cho đến khi lỗi này được sửa, nhưng tôi không muốn từ bỏ Firefox
    • Cập nhật: có vẻ là một lỗi khác nhưng có liên quan
  • Vấn đề này đã sửa trang đầu của https://www.dr.dk/

  • Tôi không rõ audioContext được triển khai theo cách nào, nhưng nó rất thông minh và động. Phát âm báo cũng giống như dùng D3 để vẽ SVG. Tôi tự hỏi liệu có serviceWorker hook nào trong một API hiệu quả hơn để đăng ký các tác vụ lặp đơn giản như trình xử lý thông báo hay không