ぶるーすくりーん

ぽんこつプログラマ日記

ネット接続できないオーディオを Google Play Music プレイヤーにするやつ書いた

GPM Play Server

ウチのオーディオシステムはネット接続できない。
Google Play Music 使うようになってからは、Google Play Music をノートパソコンで開いて、ノートパソコンとオーディオを有線ケーブルでつないで流すということをしていました。

ただこれだと。

  • 有線ケーブルが部屋をはってて邪魔
  • 有線ケーブルがつながってるから寝っ転がって作業とかできない

そこで余ってるしょぼいノートPCを Google Play Music 専用機にして Web UI で再生、スキップ、ストップをできるようにするサーバを作成しました。

f:id:tajima0111185:20170219142817p:plain

ソースコードはこちら。

github.com

GPM Play Server を余ってるマシンにインストールして、起動すれば Wi-fi 環境につながった機器から操作できるというしろものです。

f:id:tajima0111185:20170219142650p:plain

仕組み

Google Play Music からライブラリの音楽取得

以下のライブラリを利用させていただきました。

github.com

非公式の API なのですが、Google Play Music のライブラリ情報取得だとか、検索だとかストリーム用 URL 取得だとかいろいろやってくれます。

コマンドでサーバ上の音楽再生

こちらも以下のライブラリを利用させていただいてます。

github.com

そんなに大きくないので自分で書いたほうが細かい制御できるかなとも思うので、さらに機能を盛り込む場合には自分で書くかも。

スキップ、停止

このあたり でやっています。
Node.js の EventEmitter の仕組みを利用してみました。

  • play イベント
    • 再生コマンドをキックして停止用にプロセス情報をクラス変数として保持
  • stop イベント
    • 起動済みの再生コマンドを停止
  • skip イベント
    • stop イベント発行
    • play イベント発行
this.event.on('play', () => {
  this.play();
});

this.event.on('stop', () => {
  if (this.process) {
    Logger.info('Stop playing.');
    this.process.kill();
  }
});

this.event.on('next', () => {
  this.event.emit('stop');
  this.event.emit('play');
});

現在流している音楽をブラウザに表示

socket.io を使用して実現しています。

  • サーバ
  • クライアント
    • 音楽情報がソケットに入ったらブラウザに表示

つくってみて

今は余ってるノートPCに lubuntu インストールして流してるんだけど、これをラズパイ3とかにしたらもっと省エネ省スペースになって、さながら Google Play Music クライアント機能つきのオーディオっぽくなって面白いかな。