Google HomeでMP3を再生
Google HomeでMP3を再生する方法を説明する。
https://gyazo.com/d65ba135da34c06c67ff55a918bb7b29 https://hb.afl.rakuten.co.jp/hgc/164b9f1e.3c5453b2.164b9f1f.2dca31a8/?pc=https%3A%2F%2Fitem.rakuten.co.jp%2Fbook%2F15142695%2F&m=http%3A%2F%2Fm.rakuten.co.jp%2Fbook%2Fi%2F18832252%2F&link_type=text&ut=eyJwYWdlIjoiaXRlbSIsInR5cGUiOiJ0ZXh0Iiwic2l6ZSI6IjQwMHg0MDAiLCJuYW0iOjEsIm5hbXAiOiJkb3duIiwiY29tIjoxLCJjb21wIjoibGVmdCIsInByaWNlIjowLCJib3IiOjEsImNvbCI6MH0%3D
google-home-notifierをインストール
以下は、MacやLinuxなどでの手順
code:sh
$ cd ~/homebot # hubotのディレクトリに移動
$ npm install google-home-notifier --save
MP3をGoogle Homeに再生させるUNIXコマンド
次のようなファイル bin/play.js を作る。
(ファイルの編集には、nano というエディタを使う。nanoの使い方はこちら → nano) code:js
const home = require('google-home-notifier');
const argv = process.argv;
const device = argv3 || ''; const msg = 'Say "OK Google, Stop" to stop play music.';
if (mp3URL === undefined) {
console.error('usage: play.js <url of mp3> <device id>');
process.exit(1);
}
home.device(device, 'ja');
home.play(mp3URL, () => console.log(msg));
ただし、このファイルの1行目は、実行環境によっては修正が必要なことに注意。
次のように、nodeのPATHを調べて、/usr/local/bin/node と表示されるかを確認する。
code:sh
$ which node # nodeのパスを確認
/usr/local/bin/node
もし、which nodeの結果が/usr/local/bin/nodeではなく、例えば☆△◎だった場合は、#!/usr/local/bin/nodeを #!☆△◎ に書き換えればOK。
このファイルに実行権限を与えて、UNIXコマンドとして実行できるようにする。
code:sh
$ chmod 755 bin/play.js
以下のコマンドを実行すれば、クラシック音楽(J.S.Bach, BWV565 の冒頭24秒)が再生される。
code:sh
再生を止めるには、Google Homeに向かって「OK Google ストップ」と言う。
再開するには、「OK Google 再開」と言う。
ネット上のMP3ファイルを再生させるだけなら、これで設定は完了。
ただし、自宅のパソコンなどに保存しているMP3ファイルを再生させるには、以下の作業が必要。
シンプルなMP3ファイルサーバを立てる
Google HomeにMP3を再生させる際には、MP3ファイルの中身ではなく、MP3ファイルへのURLしか渡せないので、パソコンなどに保存しているMP3ファイルにURL経由でアクセスできるように、MP3ファイルサーバを立てる。
ここでは、ごくごく簡単なMP3ファイルサーバの立て方を説明する。
まず、簡易MP3サーバーのソースファイル bin/mp3server.js を作る。
code:js
const fs = require('fs');
const path = require('path');
const app = require('express')();
const port = 3000;
app.listen(port, console.log('port: ' + port));
app.get('/audio/:file', (req, res) => {
const f = req.params.file;
const p = path.join('audio', f);
fs.readFile(p, (err, data) => {
if (err)
res.status(400).send(err.toString());
else {
res.setHeader('Content-Length', data.length);
res.write(data);
res.end();
}
});
});
つぎに、この簡易MP3サーバの動作を確認する。
code:sh
$ mkdir audio # ディレクトリ ~/homebot/audio を作成
$ cp <再生したいMP3のファイル名> audio # MP3ファイルを、簡易MP3サーバの管理下にコピー
$ node bin/mp3server.js # 簡易MP3サーバを起動
port: 3000
ブラウザで次のURLを表示して、MP3が再生できたら成功。(簡易MP3サーバ経由でMP3にアクセスできた。)
http://<簡易MP3サーバのIP>:3000/audio/<再生したいMP3のファイル名>
動作確認できたら、自宅サーバ(Raspberry Piなど)を再起動しても、簡易MP3サーバが自動的に起動するように設定する。 code:sh
Ctrl + c # ひとまず、簡易MP3サーバを停止
$ sudo npm install pm2@latest -g # PM2をインストール
$ pm2 start bin/mp3server.js # PM2経由で、簡易MP3サーバを起動
$ pm2 startup systemd # PM2自体を、自動的に起動するように設定 (以下の4行が表示される)
PM2 Init System found: systemd PM2 To setup the Startup Script, copy/paste the following command: sudo env PATH=$PATH:/usr/local/bin /usr/local/lib/node_modules/pm2/bin/pm2
startup systemd -u ??? --hp /home/???
# 表示された指示の通りに、以下のコマンドを実行する
$ sudo env PATH=$PATH:/usr/local/bin /usr/local/lib/node_modules/pm2/bin/pm2 startup systemd -u <あなたのユーザー名> --hp /home/<あなたのユーザー名>
$ pm2 save # PM2の設定を記録
$ sudo reboot # 自動的に起動することを確かめるため、再起動
再起動したら、動作を確認。
code:sh
$ pm2 list # 以下のような表示がされればOK
┌───────────┬──────┬────────┬───┬─────┬───────────┐
│ Name │ mode │ status │ ↺ │ cpu │ memory │
├───────────┼──────┼────────┼───┼─────┼───────────┤
│ mp3server │ fork │ online │ 0 │ 0% │ 32.0 MB │
└───────────┴──────┴────────┴───┴─────┴───────────┘
先ほどと同じように、ブラウザで次のURLを表示して、動作を確認。
http://<簡易MP3サーバのIP>:3000/audio/<再生したいMP3のファイル名>
最後に、bin/play.js でMP3を再生できることを確認。
code:sh
$ cd ~/homebot
【注意】簡易MP3サーバのIPにはGoogle Homeからアクセス可能なIPを指定する必要がある。(localhostは指定できない)
UNIXコマンドを登録して、Slack から再生
homebot command play bin/play.js 'http://<簡易MP3サーバのIP>:3000/audio/#.mp3' Google-Home
一度登録しておけば、今後は以下のメッセージを Slack に送るだけで音楽を再生できるようになる。
homebot send play(再生したいMP3のファイル名)
【注意】ここでは、ファイル名の拡張子.mp3を省略する。
2018/3/9