Google Home をミュージックジュークボックスにする
Google Home をミュージックジュークボックスにする
Google Home を手に入れてしばらく使ってみると、そのうち大抵の人がジュークボックスにしたいと思い始めると思います。この記事では、どうにかして Google Home に手持ちの MP3 ファイルを再生させて、ミュージックジュークボックスにする方法について書いておきます。
案1: YouTube Music Premium を契約する
YouTube Music の有料プランを契約すると、手持ちの音楽ファイルをクラウドのプライベート領域にアップロードしておき、そのライブラリから再生させることが出来ます。
お金で解決というダメな大人の手段です。
案2: go-chromecast
Go言語で作られた go-chromecast を使うと、ローカルにある MP3 ファイルを Google Home などの chromecast に送り付けて再生することが出来ます。まさにこれが求めていたソリューションですね。
ただ、音声コマンドで再生開始出来るわけではなく、 cli でコマンドラインからの操作になります。
$ go-chromecast load MP3/
というわけで、このコマンドをどうやって音声で操作するか、ということを考えていきます。
案3: IFTTT を使う
IFTTT を使用すると、 Google Home から音声コマンドで Web API を叩くことが出来ます。
例えば、以下のサイトでは、 Google Home から IFTTT 経由で一度 Slack にキーワードを投稿し、 Slack からそのキーワードを見つけると、 MP3 ファイルの再生を開始させる方法が解説されています。
最終案: go-chromecast
案2で使用した go-chromecast が持っている watch コマンドで、 Google Home などの chromecast が音楽を再生しているかどうかの状態を取得することが出来ます。この状態を監視して、また go-chromecast で音楽の再生を開始してしまえば、目的達成です。
では設置していきましょう。今回は Debian 11 を使用しましたが、大した CPU パワーは使わないはずなので、 Raspberry Pi とかを利用するといいと思います。
まずは、 go-chromecast が MP3 を転送するときに、 ffmpeg が必要らしいので、 ffmepg をインストールします。
$ apt-get install ffmpeg
そして、 go-chromecast と以下のスクリプトを設置します。
#!/bin/sh
uuid="[YOUR_GOOGLE_HOME_UUID]"
go-chromecast watch -u "${uuid}" |
(\
while read line
do
status=`echo $line | sed 's/^.*,"playerState":"//g' | sed 's/".*$//g'`
if [ "$status" = "PLAYING" ] || [ "$status" = "BUFFERING" ]; then
echo "START!"
go-chromecast playlist -u "${uuid}" MP3/
elif [ "$status" = "PAUSED" ]; then
echo "STOP!"
fi
done
)
[YOUR_GOOGLE_HOME_UUID] の部分は、 Chromecast デバイスが複数あった場合への対処として入れておきました。以下のコマンドを実行すると表示されますので、ご自身の環境に置き換えてください。
$ go-chromecast ls
これで、 Google Home に向かって "音楽を再生して" などとして、何か音楽を再生しようとすると、勝手にローカルの MP3 フォルダの曲を再生し始めます。
ただ、 MP3 ファイルを Google Home が再生できるように変換する時間があるらしく、実際に再生が始まるまで 20秒くらい待たされます。ちと残念ですね。
Discussion