自製聲音播放伺服器系列(1)-環境準備及功能規劃製作

聲音播放伺服器!?這不是很早就成熟的東西了嗎?雖然市面上一堆別人寫好的軟體可以用,但用起來很不順手,也不可以自己擴充,剛好228連假,就花點時間動手來玩玩吧!於是找了片Raspberry PI 3,把環境裝起來,就開始天馬行空做起來,原本以為很簡單,後來發現裡面其實還滿多以前沒處理過的東西要研究的。

想要達到的功能:

  • 可以瀏覽器透過HTTP來播放、指定播放歌曲
  • 可以透過藍芽連接不同音響,指定要在哪個設備播放
  • 透過預先錄好的聲音當指令,透過網址叫小愛同學做任何事,這樣就可以遠端控制小愛(撒花~
  • 可以結合之前寫的bot,透過手機、LINE聊天軟體進行播放音樂或控制家電

>>> 可以點此觀看展示影片 <<<

準備工作

播放MP3音源檔 /play/{檔案}

首先,如何播放MP3音源檔就是一個問題。G大了一下,採用下列兩個函數來解:

import(
   "github.com/hajimehoshi/oto"
   "github.com/hajimehoshi/go-mp3"
)

雖然可以順利播放mp3,但還是有無法暫停、無法從特定時間開始播放等問題,可以列在下次改版,再來解決,目前只要能正常播放就可。

控制音量 /volume/{音量}

原本以為音量控制是小蛋糕一片,結果開始動手才知道複雜。因為是用pi當控制板,所以G了一下命令列的音量控制命令:

命令列控制音量:amixer sset '裝置名稱' 音量(0~120)

結果還要知道裝置名稱才能設定(鬼才會知道啦),照例繼續G,才找到PI的命令列列出音量裝置指令:

amixer scontrols  // 會列出所有設備

// 同樣效果
amixer -D bluealsa scontrols
mixer scontrols 執行結果:列出現有設備

雖然會列出所有聲音的資訊,因為是從命令列下指令,所以必須把執行結果抓出來,再處理字串,找到 ‘SSB-200 – A2DP’ 或是 ‘小米AI音箱 – 7038 – A2DP’ 等名稱(單引號不可漏掉),再放入控制音量的:裝置名稱中,才能設定音量,需要兩步驟處理,不管如何,控制音量的功能算是有解啦(繼續撒花~

切換藍牙設備(未解)

最好是可以透過程式來自動切換播放的設備,這樣我們就可以控制聲音在房間或是客廳、廚房等地方播放音樂,讓音樂隨著走

// 列出所有設備
amixer controls

// 設定輸出裝置
mixer cset numid=3 {value}
value	device
0	automatic
1	3.5 mm jack
2	hdmi
mixer controls 執行畫面
// command line 手動切換設備
bluetoothctl -a
connect {要連接的設備Mac}(如:FC:58:FA:7A:20:B5)
exit

// shell script
#!/bin/bash
bluetoothctl << EOF
connect {要連接的設備Mac}
EOF

最後程式執行畫面

命令列執行結果

所有功能列表

// 播放音樂
    /play/{song name}   // 播放音樂
    /songname           // 取得目前正在播放音樂的名稱

// 音量控制
   /volume/{音量}.      // 設定音量大小

找資料找到的相關資訊

// Raspberry Pi CPU溫度
/sys/class/thermal/thermal_zone0/temp