文章總列表

用Pi打造Spotify Connect藍芽音箱

2023/2

這篇描述的Pi會有音訊中斷的問題,搭配下面這篇可以解決

http://lihgong.blogspot.com/2023/02/pispotify-connectbug.html


要解決的問題

手機配對藍芽喇叭,播放Spotify的體驗爛透了…

  1. 走進咖啡廳,背景播著悠揚的音樂,我在裡面可能看Youtube影片,打電動

  2. 為了有悠閒的背景音樂,我買了藍芽喇叭,事情不大對勁:手機配對喇叭後,所有聲音都導過去了:看YouTube未必想要聲音從喇叭出來,最後喇叭平常關著,要聽音樂得專程開喇叭。人懶就不會想開,最後沒有背景音樂

  3. 店家的解法簡單而暴力:用一支專門的手機放音樂。但我只想用iPhone 14 Pro MAX放音樂,聽說這樣比較悅耳(信仰),買兩支太傷本了!

  4. 這題是近10年手機吃掉音樂播放器長出的問題,古早時代CD播放器只放音樂,沒事

解決方案:Spotify Connect

Spotify在10年前已經解決這題,2013年發佈的Spotify Connect運作情境如下

  1. 首先要訂閱Spotify Premium,克金萬歲!先讓所有裝置都登入同一個Spotify帳號 {手機,電腦,電視,齊柏林音箱}

  2. 先讓電腦播放音樂,特異功能來了,手機可以遙控電腦上的音樂:暫停,下一首,音量調整

  3. 電視也裝了Spotify APP,再一個特異功能,手機一點,電腦音樂移轉到電視去。同一首歌,從切換的位置繼續放,一樣能暫停,下一首,音量調整

  4. 放上一顆三萬塊的齊柏林音箱不只彰顯品味,內建的Spotify Connect也能移轉音樂!錢錢真是好東西,再買台高檔咖啡機,咖啡廳體驗帶回家!

  5. 手機都能空下來,講電話,看YouTube,玩遊戲

這些裝置都能上網,執行Spotify播放器,發出聲音,音樂就能在裝置間流轉。使用體驗比藍芽喇叭配對好多了

一般支援Spotify Connect音箱都要插電,不容易移動。這篇介紹用Pi打造Spotify Connect藍芽喇叭,在家裡部署後,老婆用得讚不絕口呢!如果喇叭要插線,那搭建起來更簡單!


土炮解決方案,硬體篇

要準備的東西如下,我做了兩套

  • UE-MEGABOOM-BLACK/ {Pi-3B + ETHERNET}
  • UE-MEGABOOM-RED/ {Pi-ZW + USB-HAT + USB-Ethernet + ETHERNET}
    • 首先要有一片Pi3B+,不要買4代(太燙了)
      • 這片板子放高處,盡量不要有遮蔽,直視居家所有角落,直通藍芽喇叭。通訊術語Line of sight精確描述此需求

      • Pi3B+的藍芽跟WiFi會互相干擾,播放音樂會斷斷續續的,爛死了
        • 斷斷續續英文是drop out,找Raspberry Pi bluetooth speaker drop out能找到很多資料
        • 插網路線,或是另外插WiFi Dongle解這題。很笨吧,都有內建WiFi竟然還得外插WiFi Dongle

    • 不要用Pi-ZW,我剛好有USB-HAT和USB-Ethernet,你不會想這麼搞的
      • Pi-ZW的藍芽和WiFi也會互相干擾,爛死了
      • 加上USB-HAT和USB-ETHERNET,用Pi3B+省事很多

    • 準備藍牙音箱,我有兩顆聲音宏亮UE-MEGABOOM,一紅一黑
      • 紅色電池老化了,插電放高處播音樂,他是公播機
      • 黑色電池剛換過,洗澡煮飯聽歌,非常適合

    • 紅音箱加上Pi-ZW,那時候還用WiFi聲音會斷斷續續


    • 放在高處,插著電源的公播機,隨時塞Spotify音樂給他

    土炮解決方案,軟體篇,Linux烹調指南

    step-by-step寫起來太瑣碎,這是我的筆記。也許直接課金買齊柏林喇叭才是正解!

    1. 安裝Raspberry Pi Linux,這篇文章編寫我用bullseye版本的debian。推薦用官網的Raspberry Pi Imager燒錄SD卡,燒錄前能指定WiFi參數,打開ssh,以及設定密碼

    2. 照一般流程更新軟體
      apt-get update
      apt-get upgrade

    3. 安裝pulseaudio。Linux有ALSA和Pulseaudio兩個音樂框架,我都不熟!但是我搞了半天,用pulseaudio才搞得定。可能我技術不精,Anyway,裝吧!
      apt-get install pulseaudio
      apt-get install pavucontrol paprefs
      apt-get install pulseaudio-module-bluetooth

    4. 用命令列配對藍芽喇叭,真神奇,還真的不難!配對後的裝置會記憶在Linux藍芽框架裡。下面命令的MAC address請自己換掉
      sudo bluetoothctl
      power on
      agent on
      default-agent
      scan on // 搜尋附近藍芽喇叭
      devices // 列出找到的裝置,稍等一下,會有MAC位址和裝置名稱
      pair C0:28:8D:5C:20:54 // 配對喇叭(喇叭那裡也要切成配對模式)
      trust C0:28:8D:5C:20:54 // 相信喇叭(以後可以固定連線)
      connect C0:28:8D:5C:20:54 // 連線喇叭

      連線成功後,試著播放一下音樂看看,讓藍芽喇叭隨便撥點聲音
      aplay -vv /usr/share/sounds/alsa/Front_Left.wav

    5. 安裝spotify播放軟體,撈Raspberry pi spotify有不少教學。最初我看raspotify用得人多,安裝也簡單,但我就是無法讓他對接pulseaudio播藍牙耳機,直接放棄;如果不接藍牙耳機,直接用raspotify簡單好用

      後來我發現Spotifyd能播藍芽!到github0.34版;這個工具一定要讀官方文件,以及這篇文章,Google撈Spotifyd也有很多資訊
      wget https://github.com/Spotifyd/spotifyd/releases/download/v0.3.4/spotifyd-linux-armv6-slim.tar.gz
      tar zxvf spotifyd-linux-armv6-slim.tar.gz // 解壓縮
      sudo cp spotifyd /usr/local/bin // 我把執行檔放這裡

      試跑看看,在Spotify APP會跳音箱。如果能從手機Spotify轉移音樂,那就成功啦
      spotifyd --no-daemon

    6. 微調服務,重新開機要自動啟動,藍芽喇叭可能自己關機,打開藍牙音箱要自動連線。這些事沒標準答案,我搞了兩天弄出一些笨笨的解法,歡迎自取
      1. 因為WiFi會跟藍牙打架,需要預設關閉WiFi
        sudo vi /boot/config.txt
        加入dtoverlay=disable-wifi

      2. WIFI預設關閉,要打開Ethernet並且插上網路線,不然就連不上板子了
        sudo ifconfig eth0 up

      3. Pulseaudio是user-space的音效框架,得讓pi帳號自動登入才有聲音。這個在pi有現成工具能搞定
        sudo raspi-config
          System Options
          S5 Boot/Auto Login
          B2 Console Autologin, Text console, automatically logged as ‘pi’ user

      4. 開機登入執行bash,會自動跑~/.bashrc,在裡面執行start.sh啟動spotifyd
        vi ~/.bashrc
        加入 cd /home/pi/spotifyd/; ./start.sh; cd -

      5. 這些小script當然得自己弄,包括spotifyd的啟動參數,定期重連藍芽
        mkdir ~/spotifyd
        cd spotifyd

        // start.sh


        // guard.py


    結語

    原來搞定Spotify Connect,工程師做了不少事歷經苦難才端出來,可能花錢買裝置才是正解。等我尾牙抽到大獎,買顆齊柏林音箱當公播機,提高氣質!目前先用土炮組合擔待著


    留言

    這個網誌中的熱門文章

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

    幼犬書桌椅選擇心得 升降桌 兒童桌椅

    CANON G3000 廢墨瓶改裝