用Pi打造Spotify Connect藍芽音箱
2023/2
這篇描述的Pi會有音訊中斷的問題,搭配下面這篇可以解決
http://lihgong.blogspot.com/2023/02/pispotify-connectbug.html
要解決的問題
手機配對藍芽喇叭,播放Spotify的體驗爛透了…
- 走進咖啡廳,背景播著悠揚的音樂,我在裡面可能看Youtube影片,打電動
- 為了有悠閒的背景音樂,我買了藍芽喇叭,事情不大對勁:手機配對喇叭後,所有聲音都導過去了:看YouTube未必想要聲音從喇叭出來,最後喇叭平常關著,要聽音樂得專程開喇叭。人懶就不會想開,最後沒有背景音樂
- 店家的解法簡單而暴力:用一支專門的手機放音樂。但我只想用iPhone 14 Pro MAX放音樂,聽說這樣比較悅耳(信仰),買兩支太傷本了!
- 這題是近10年手機吃掉音樂播放器長出的問題,古早時代CD播放器只放音樂,沒事
解決方案:Spotify Connect
Spotify在10年前已經解決這題,2013年發佈的Spotify Connect運作情境如下
- 首先要訂閱Spotify Premium,克金萬歲!先讓所有裝置都登入同一個Spotify帳號 {手機,電腦,電視,齊柏林音箱}
- 先讓電腦播放音樂,特異功能來了,手機可以遙控電腦上的音樂:暫停,下一首,音量調整
- 電視也裝了Spotify APP,再一個特異功能,手機一點,電腦音樂移轉到電視去。同一首歌,從切換的位置繼續放,一樣能暫停,下一首,音量調整
- 放上一顆三萬塊的齊柏林音箱不只彰顯品味,內建的Spotify Connect也能移轉音樂!錢錢真是好東西,再買台高檔咖啡機,咖啡廳體驗帶回家!
- 手機都能空下來,講電話,看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寫起來太瑣碎,這是我的筆記。也許直接課金買齊柏林喇叭才是正解!
- 安裝Raspberry Pi Linux,這篇文章編寫我用bullseye版本的debian。推薦用官網的Raspberry Pi Imager燒錄SD卡,燒錄前能指定WiFi參數,打開ssh,以及設定密碼
- 照一般流程更新軟體
apt-get update
apt-get upgrade - 安裝pulseaudio。Linux有ALSA和Pulseaudio兩個音樂框架,我都不熟!但是我搞了半天,用pulseaudio才搞得定。可能我技術不精,Anyway,裝吧!
apt-get install pulseaudio
apt-get install pavucontrol paprefs
apt-get install pulseaudio-module-bluetooth - 用命令列配對藍芽喇叭,真神奇,還真的不難!配對後的裝置會記憶在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 - 安裝spotify播放軟體,撈Raspberry pi spotify有不少教學。最初我看raspotify用得人多,安裝也簡單,但我就是無法讓他對接pulseaudio播藍牙耳機,直接放棄;如果不接藍牙耳機,直接用raspotify簡單好用
後來我發現Spotifyd能播藍芽!到github抓0.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 - 微調服務,重新開機要自動啟動,藍芽喇叭可能自己關機,打開藍牙音箱要自動連線。這些事沒標準答案,我搞了兩天弄出一些笨笨的解法,歡迎自取
- 因為WiFi會跟藍牙打架,需要預設關閉WiFi
sudo vi /boot/config.txt
加入dtoverlay=disable-wifi - WIFI預設關閉,要打開Ethernet並且插上網路線,不然就連不上板子了
sudo ifconfig eth0 up - Pulseaudio是user-space的音效框架,得讓pi帳號自動登入才有聲音。這個在pi有現成工具能搞定
sudo raspi-config
System Options
S5 Boot/Auto Login
B2 Console Autologin, Text console, automatically logged as ‘pi’ user - 開機登入執行bash,會自動跑~/.bashrc,在裡面執行start.sh啟動spotifyd
vi ~/.bashrc
加入 cd /home/pi/spotifyd/; ./start.sh; cd - - 這些小script當然得自己弄,包括spotifyd的啟動參數,定期重連藍芽
mkdir ~/spotifyd
cd spotifyd
// start.sh
// guard.py
結語
原來搞定Spotify Connect,工程師做了不少事歷經苦難才端出來,可能花錢買裝置才是正解。等我尾牙抽到大獎,買顆齊柏林音箱當公播機,提高氣質!目前先用土炮組合擔待著
留言