ネット接続できないオーディオを Google Play Music プレイヤーにするやつ書いた
GPM Play Server
ウチのオーディオシステムはネット接続できない。
Google Play Music 使うようになってからは、Google Play Music をノートパソコンで開いて、ノートパソコンとオーディオを有線ケーブルでつないで流すということをしていました。
ただこれだと。
- 有線ケーブルが部屋をはってて邪魔
- 有線ケーブルがつながってるから寝っ転がって作業とかできない
そこで余ってるしょぼいノートPCを Google Play Music 専用機にして Web UI で再生、スキップ、ストップをできるようにするサーバを作成しました。
ソースコードはこちら。
GPM Play Server を余ってるマシンにインストールして、起動すれば Wi-fi 環境につながった機器から操作できるというしろものです。
仕組み
Google Play Music からライブラリの音楽取得
以下のライブラリを利用させていただきました。
非公式の API なのですが、Google Play Music のライブラリ情報取得だとか、検索だとかストリーム用 URL 取得だとかいろいろやってくれます。
コマンドでサーバ上の音楽再生
こちらも以下のライブラリを利用させていただいてます。
そんなに大きくないので自分で書いたほうが細かい制御できるかなとも思うので、さらに機能を盛り込む場合には自分で書くかも。
スキップ、停止
このあたり でやっています。
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 を使用して実現しています。
- サーバ
- Google Play Music から音楽情報を取得したらソケットに emit
- クライアント
- 音楽情報がソケットに入ったらブラウザに表示
つくってみて
今は余ってるノートPCに lubuntu インストールして流してるんだけど、これをラズパイ3とかにしたらもっと省エネ省スペースになって、さながら Google Play Music クライアント機能つきのオーディオっぽくなって面白いかな。