文章總列表

Spotify Connect音箱,多喇叭同步

緣起

三年前整的樹莓派做Spotify Connect音箱,還有這篇,體感差強人意,藍芽連線不穩常斷線,一次只能推一顆喇叭

2026 臺灣光復節趁著颱風假,跟AI一起解這兩題。現在手機 Spotify 會出現三個設備:紅、黑、紅加黑(全屋同步)!

單顆喇叭(不管是水母、齊柏林還是 BOSE)覆蓋有極限;把兩顆快10歲的 UE Megaboom 放客廳與餐廳,聲音完全同步,走到哪都飽滿均勻,舒服!這篇紀錄架構,核心設計,和關鍵採坑點。音效底層改用Linux PipeWire


系統設定

主控端採用Proxmox架構,拆分虛擬機與容器

  • 公播主控(LXC / Ubuntu 26.04 LTS / music)
    • 音訊源:spotifyd(GRP-ALL-PLAYER)
    • 輸出:snapcast server,對全網廣播
  • 節點 1(VM / Ubuntu 26.04 LTS / musicRed)
    • 硬體:直通USB藍牙Dongle連線紅喇叭
    • 輸入:spotifyd(UE-RED)與snapcast client(廣播)
    • 輸出:PipeWire 混音後送進藍牙
  • 節點 2(VM / Ubuntu 26.04 LTS / musicBlack)
    • 硬體:直通專屬 USB 藍牙 Dongle 連線黑喇叭
    • 輸入:spotifyd(UE-BLACK)與snapcast client(廣播)
    • 輸出:PipeWire混音後送進藍牙


關鍵設定:藍芽連線

避免無腦重連,藍芽音箱斷線才重新連線




WirePlumber Headless 藍牙關鍵設定(關閉 Seat 偵測)

預設的 WirePlumber 會監聽桌面登入狀態(Seat 偵測),在無螢幕的 Server 環境下,沒有實體使用者登入而拒絕啟用藍牙 Audio Sink




Snapcast server/client

snapcast會讓server/client彼此對時,持續追蹤;會把1秒的聲音灌入client,足夠穿越網路,應付藍芽重傳;時間差不大就resample追上,差很大就快速跳躍追趕

實測重新開機,或是喇叭中途開關,都能在幾秒內追上

每新增一顆喇叭,就是多一台電腦(虛擬機或是pi),裡面執跑snapclient連接喇叭,可以擴展


單機雙藍芽Dongle翻車

原本曾嘗試在同一台 Linux 接兩顆藍牙 Dongle 同時推兩顆喇叭

  1. 便宜的Realtek RTL8761B燒錄的MAC位址完全一樣,Linux 底層(hci0, hci1)直接衝突
  2. 嘗試改寫韌體組態(rtl8761b_config.bin.zst)注入指令更換MAC Addr,維護性極差放棄
  3. 無線通道遇到封包碰撞重傳,幾乎無法保證時鐘對齊

保持簡單:一台機器配一個dongle連一顆喇叭。聲音同步靠snapcast處理,乾淨漂亮


AIRPLAY(失敗)

現在這對喇叭只能用Spotify唱歌,我想用shairport-sync對接蘋果airplay,讓手機的聲音串聯到紅,黑,或是紅加黑喇叭。實際搞起來到處都是坑,投降


結語

  1. 折騰樂無窮:雙喇叭漫遊的包覆感超乎預期,一套設備用10年還很讚
  2. Apple生態系在AirPlay 2上下了極大功夫(播放YouTube時畫面向後延遲等聲音),蘋果公司鐵定都搞過這些事,直接買HomePod才是正解


留言

這個網誌中的熱門文章

ELM327 OBD-II 心得 (2),ELM327底層介面

STM32 UART + DMA,使用HAL實作TX/RX,以及不定長度接收

玩CAN bus的傢伙們 (1) CandleLight-based USB-CAN