目錄

藍芽耳機在 Linux 了解

背景

BT + AC600 瑞昱(Realtek)晶片 USB 網卡(RTL8821CU)加上 Sony WH-1000XM3 耳機。

一張標準 CD 音質(16bit/44.1kHz)需要約 1.411 Mbps 的頻寬,而傳統藍牙可用頻寬通常只有數百 kbps,無法直接傳送未壓縮音訊,必須進行壓縮。

  • SBC(業界公版):藍牙技術聯盟(Bluetooth SIG)制定的強制標準。所有藍牙音訊裝置都必須支援,但壓縮演算法保守、音質普通
  • AAC(Apple 主導):針對 iOS/macOS 深度最佳化的進階音訊編碼,複雜運算換取高音質,但對非 Apple 晶片的解碼效率差異很大
  • aptX 系列(Qualcomm 高通):主打低延遲與固定演算法(aptX、aptX HD、aptX Adaptive),適合通話、追劇、遊戲,在 Android 與具備高通晶片的裝置上普及
  • LDAC(Sony 自研):為了「Hi-Res 認證」而生,將傳輸碼率暴力拉高到最高 990 kbps,是目前最接近無損音質的藍牙編碼
表格比較
表格比較

其中 LDAC 在 Windows 並不原生支援,所以很難用,Sony 在 2017 年將 LDAC 的編碼端原始碼(Encoder)貢獻給了 Android 開源專案 (AOSP)。Linux 社群隨後將開源的 LDAC 函式庫移植到 PipeWire 與 PulseAudio,因此在 Linux(如 Debian)上可以免費且自由地直接啟用 LDAC。

Windows 本身不內建,但可透過第三方開發者付費開發的驅動程式(例如 Alternative A2DP Driver)來讓 Windows 支援 LDAC 與 aptX HD。Windows 系統出於授權考量,預設僅啟用 SBC、AAC 與部分 aptX,若無額外購買第三方驅動則無法直接輸出 LDAC。

耳機卡頓原因

原本用了幾個工具來 Deubg:

  • pactl: (PulseAudio / PipeWire 控制工具),查詢音效伺服器中目前的輸出裝置(Sink)清單,並確認藍牙耳機實際協商套用的編碼(Codec)是哪一種
  • pw-top: 即時監控音訊引擎的運作狀態,重點觀察是否有 ERR(錯誤/Buffer Underrun/掉封包),以及即時取樣率(RATE)和系統處理延遲(BUSY/WAIT)
  • bluetoothctl: 檢查底層藍牙連線狀態、配對協議與電量

USB 網卡,這正是造成 LDAC 嚴重卡頓的根本硬體瓶頸。因為藍芽固定走 2.4GHz,當我的 Wi-Fi 也連 2.4GHz 時,這張 USB 網卡的同一根天線必須在「接收 Wi-Fi 封包」與「發射藍牙 LDAC 封包」之間極速切換。只要 Wi-Fi 稍微有封包傳輸,LDAC 就會瞬間掉封包,導致耳機卡頓或爆音。

因此要切到 5GHz,Wi-Fi 移至 5GHz 頻段運作後,2.4GHz 頻率就會完全留給藍牙使用,天線與頻寬干擾會大幅降低,或者我是直接關閉 WiFi 畢竟我用網路線。

Reference