初めに
表題の通り、Raspberry Piを作業用BGM再生マシンにするために参考にしたサイトのリンク集です。
目標としては、下記3点を満たすものを作りたいと思いました。
- Spotifyの再生(Spotify Connect)
- 放送中のラジオ番組の聴取(Radiko)
- スマホの音をスピーカーに流す(Bluetooth)
参考URL
- NanoPi NEOにインストールしたMPDでradikoを聞く - https://burro.hatenablog.com/entry/2019/02/16/175836
- Raspberry Pi で Bluetooth レシーバー (オーディオ:A2DP) を作成するための設定方法解説 - https://ifritjp.github.io/documents/singleboard/bluetooth-a2dp-receiver/
- raspiでspotifyを聴く https://qiita.com/kons_9/items/5cc5a7ded0b17047bf89
- Installing on a Raspberry Pi - Spotifyd - https://spotifyd.github.io/spotifyd/installation/Raspberry-Pi.html
- https://yueno.net/xoops/modules/xpwiki/?PC%2FRaspberryPi%2FRAM%E3%83%87%E3%82%A3%E3%82%B9%E3%82%AF%E3%81%AE%E5%88%A9%E7%94%A8
結果
一応、やりたいことは実現できました。ALSAの副産物として、全音源排他です。
再生停止すれば自動的に切り替わるので変な音が混ざらず安心。
Spotifyアプリからの音量調整も効きます。MPDクライアントからのラジオの音量調整も効きます。
ソフトウェアボリュームなので、音質を犠牲にするらしいですが聞ければいいだけなので気にしません。
AVRCPは動作確認していないのでBluetoothの音量調整はできない認識ですが、ソース(スマホ)側の音量をいじればいいだけなので気にしません。
機器構成
構成要素は下記のとおりです。基本的には家に転がっていたものの寄せ集めです。
USB DACだけは2000円前後の安いのを買いました。
クリエイティブ信者ではありません。コスパで選んだら偶然こうなっただけです。
SoundBlaster Play 4はUSB-C端子しかないので、間違って購入しないように。
- Raspberry Pi B
- 有線LANにてネットワーク接続。(面倒なのでWIFI機能は特に殺したりしないで放置)
- SDカード 16GB
- OSは Raspberry Pi OS 32bit版(Raspberry Pi OS with desktop; October 30th 2021)
- セットアップのためにモニター、USBキーボード、マウスを用意。初期設定以後はSSHを有効化して周辺機器は外す。
- 電源は公式のUSB-ACアダプタ
- Sound Blaster Play 3
- Pebble (V1)
やったこと
検索キーワードになりそうなことをざっくりとだけ書いていきます。
やり方は細かく説明しないので適宜ぐぐってください。
1.
適当なSDカードにRaspberry Pi OSを焼く。
初回起動時に行われるアップデートは割と時間がかかるのでご飯でも食べてください。
spotifydの配布がarmhfだけで、arm64はなかったので32bit版OSイメージを焼きました。
2.
/tmpをRAMディスク化する。SDカードのスワップを無効化する。
当初は/var/tmpもRAMディスク化してみたものの、
fstabの記載にミスがあったのか/var/tmpのマウントに失敗してOSが立ち上がらないので/tmpだけをRAMディスク化することに。
/var/logはログレベルもいじらず普通にSDカードに書き出す状態のままです。
本来ならspotifyのキャッシュなんかはRAMディスクに入れるべきですが面倒なので放置。
/tmp (tmpfs) にシンボリックリンクでも貼っといたほうがいいとは思います。
3.
Spotifyd をインストール。
Spotifydの実行ファイルを落としてきて、/usr/binに配置、その後spotifyd.serviceを/etc/systemd/user/に置くだけ。
https://github.com/Spotifyd/spotifyd/releases/download/v0.3.3/spotifyd-linux-armhf-slim.tar.gz
https://github.com/Spotifyd/spotifyd/blob/master/contrib/spotifyd.service
参考URLでは設定ファイルにアカウントを書かなければいけないようなことが書いてありましたが、
実際は同じネットワーク内ならスマホ(等のログイン済み端末)のアカウントで自動的にログインされるので設定ファイルは作らず、systemdで ./spotifyd --no-daemon
を自動起動化しただけです。
※ ちなみに、当初はRaspotifyを使ってみましたが、再生開始のタイミングでクラッシュして使い物にならないので止めました。
4.
参考URLを見ながらRadioRelayServerをインストール。
動作環境として、python3、Django、ffmpeg、MPDが必要でした。aptでインストール。
本当はPulseAudioにラジオの音を流したかったものの、MPDとPulseAudioの連携がうまくいかなかったのでALSAに直接流すことに。
5.
参考URLを見ながらbluetoothctlでスマホとRaspberry Piをペアリング。
bluetoothctlで agent NoInputNoOutput
してもスマホ側からのペアリングが通らなかったので、
Raspberry Pi側からpair→trustしました。(注:bluetoothctlのscanとdiscoverableは終わったらoffに戻すこと。)
最初からBluetoothのA2DB Sinkは有効だったので、単にペアリングしただけです。
今後やってみたいこと・現状できていないこと
- NASに置いたmp3の再生。
- クラウドストレージに置いたmp3のストリーミング再生。
- Radiko以外のHLSストリーミングへの対応。
- 再生、停止、スキップ程度の簡単なリモコン操作。(Bluetoothリモコンが現実的?)
- 安定運用できるようになったらUSB SSDブートへの切り替え。