Google HomeからiTunesの音楽ファイルを再生

我が家の音楽環境は下図のようになってます。

f:id:satoko_szk:20180520180321p:plain

iTunesの音楽データをNASで管理していて、
WindowsタブレットiTunes再生して、Bluetoothスピーカーから音楽流す。
(ただし、Bluetoothスピーカーといっても、Bluetoothレシーバを介して、コンポのスピーカーでの再生。お風呂に入るときには、防水ワイヤレスのBluetoothスピーカーに切り替えて再生)


昨秋、Google Homeが我が家にやってきてから、
Google Homeで曲を再生したり、音量の上げ下げをしたいなぁ、
という欲求が発生。

あと、Google Homeとスピーカーの位置が近いため、
スピーカーから音を流しているときに、
Googleの認識精度が悪いのですね。

f:id:satoko_szk:20180520180941j:plain:w300
・・・うん、まぁ、近すぎなのはわかってる( ̄~ ̄;

Google Homeの置き場所、悩んだんだけど、
電源コードのことを考えると、すっきり置ける場所がどうにもここしかなくてさ。

なので、これを改善したいなぁ、ということも常日頃から思ってました。


で、少し前に、Google HomeBluetoothスピーカーから音を鳴らせるように対応されたところで、
Google Homeを介してiTunesの音楽を鳴らせるようにできれば、
万事解決するよなぁ、と考え始めました。

「ねぇ、Google
と話しかけて、Google Homeが音声コマンド待ち状態になると、
Google Homeから鳴らしている音はミュート状態になるので、
Google Homeを介してiTunesの音楽を鳴らすことができれば、
「ねぇ、Google。○○して」(♪♪♪)
「すみません、よくわかりません」
「ねぇ、Google。○○して!」(♪♪♪)
「すみません、よくわかりません」
「(イラッ)」
ていう日々からも解消されるな、と。


というわけで、Google HomeからiTunesの音楽を流す方法を調べたところ、
出てきたのが、Google Play MusicのライブラリにiTunesの音楽データをアップロードして、
これを再生する、という方法。

音楽データが二重管理になることとか、
Google様に音楽データまで献上することとかに、若干の抵抗を感じたけれども、
便利さと引き換えに、ちょっと魂を売って、
Google Play Music Manager使って、音楽データをアップロードして試してみた。

結果。

  • 「音楽流して」はOK
  • 「○○(歌手名や曲名)を流して」は、うまくいったりいかなかったり。(どうしてアルバムで曲を入れていて、各種情報もしっかり登録しているのに、アーティストの名前を言っても、一曲しか認識してくれないんだ!)
  • スマートプレイリストは作れない。プレイリスト作りたかったら、ひとつひとつ曲を選択するしかない。

という感じで、私的には魂売ってまで使う代物ではない、という結論。

というわけで、別の方法を模索。

色々調べていくうちに、以下の情報に辿り着く。

  • Google HomeはChromecastと同じプロトコルで連携できる。
  • Chromecastと連携するプログラムは自作できる。

お。
てことは、ラズパイ使って、iTunesの音楽流せるんじゃない?

こんな方式。

f:id:satoko_szk:20180520152037p:plain

iTunesは、ライブラリのデータをxmlでも管理してくれているから、xml読み込んで、
XPath検索すれば、結構自由度高く曲名検索できそう。

というわけで、早速、試してみた。

まず、ラズパイでChromecast連携する手段について調べたところ、
以下の2つを見つけた。

  • mkchromecast
    • パラメタ渡せば、そのまま音楽や動画をキャストしてくれる
    • ローカルファイルのデータのキャストもOK
  • pychromecast
    • python用のライブラリ
    • pythonプログラム書いて、そこから関数呼び出して、キャスト端末への接続、音楽や動画の配信を行う
    • ローカルファイルのデータはキャストできない。URL指定のみ。

Pythonはまだやったことないし、mkchromecastの方が手っ取り早そうだな、と思い、まずはこちらで試してみた。

結果。

  • 動画のキャストはできた
  • ローカルの音楽のキャストがうまくいかない。URL指定ならばうまくいく。

どうにもローカルの音楽ファイルのキャストは実現できず。
URL指定ならうまくいくので、Webサーバに配信する音楽データを一時的に置いて流せばいけるのだけれど、
それならば、色々小回りの利きそうなpychromecastでやる方が良さそう。

というわけで、「初めてのPython」兼ねて、試してみた。

長くなるので、詳細は↓こっちの方に記載。

Google HomeでiTunesの音楽ファイルを再生 - Sato's Tech Memo


結果を言うと・・・
うまくいきました!(^O^)

自作プログラムだと、
曲がうまく認識されなくても、自分で、ゆらぎ変換等をかけて認識できるようにできるからいいね♪
音楽データも完全に一元管理だし。

スマート家電が充実してきた昨今、プログラミングって、
日曜大工みたいな感じだよなー、と思う。
ちょっと足りない部分を自分で補ったり、自分好みにカスタマイズする感じ。


というわけで、
さっ、Google Play Musicに上げた音楽をさくっと削除しよう♪
と思ったら、
なんだよ、最大でアルバム単位でしか削除できないのか(- -;
アップロードの手間は最小限、削除の手間は最大限。
めんどくさいなー、もう。