Amazon Echoで浦ラジを聴く
これはラブライブ!アドベントカレンダー17日目のエントリです。
先日、ついに日本でも発売されたスマートスピーカAmazon Echo。自分も早速入手して、いろいろ遊んでいます。
音楽をかけたりニュースを読むだけでなく、他にも「アレクサ、買い物リストに卵を追加して」で、買い物リストへの追加ができたり、日常生活で役立ちそうな機能がいっぱいあります。
で、我々ラブライバーにとっては毎週水曜に浦ラジをチェックするのは当然なわけですが、毎度PCをひらいて再生するのが面倒だなーということがありますよね?
そこでAmazon Echoの出番です。
ただ、いまのところ響ラジオステーションの公式スキル(一般的にいうところのアプリ)に相当するものはリリースされていません。
なので、早速Amazon Echoで浦ラジを再生するスキルを、自作してみたいと思います。
(当然、これは響ラジオステーション公式のアプリではないので、自己責任でお試しください・・・
スキルのアーキテクチャ
まずはアーキテクチャを考えます。
Alexa Skillには既に、外部のmp3やm3u8などを再生できる機能が備わっていますので、これを利用すれば再生できそうです。
しかしここで1つ問題があります。それは響ラジオステーションのストリーミングには暗号化がされており、これを復号化しながらAmazon Echoで直接再生する方法は現状ではない、と思われます。
なのでAlexaからの応答を受け付けるLambdaとは別に、ストリーミングを別のLambdaでダウンロードしS3に配置。そしてこれAmazon Echoで再生する方式にします。
浦ラジは毎週水曜日の正午くらいに配信されるようですので、ストリーミングをダウンロードするLambdaは水曜の14時くらいにに定期的に実行するようCloudWatchに設定すれば、いい感じにできそうです。
アプリの配備
今回作成したコードはこちらです。
https://github.com/zephiransas/alexa-llss-skill
はじめに.envrc.orig
をコピー&リネームで.envrc
にします。環境変数の管理にはdirenvを使っています。
つぎに.envrc
のBUCKET_NAME
を設定しておきます。これはダウンロードしたストリーミングファイルの保存先になるS3バケット名です。
APP_ID
については、まだ設定しなくても大丈夫です。
次にAlexaから呼び出すLambdaを配備します。serverless frameworkを使っていますので
$ sls deploy
のコマンドだけで、デプロイできます。
このコマンドで2つのLambdaがデプロイされます。
1つ目のLambdaはAlexaから呼び出され、環境変数BUCKET_NAME
のS3を参照し、このなかにあるllss[配信回数].mp4
というファイルのうち、配信回数がもっとも大きいファイルをAlexaで再生するLambdaにしています。
もう1つがCloudWatchから定期的に実行され、ストリーミングをffmpegで変換しつつS3に保存するLambdaです。 Lambda内で通常はインストールされていないffmpegを実行できるようにする方法は、こちらのエントリで別途、解説しています。
ドしておきたい場合は、Lambdaのコンソールからテスト実行すれば、3分程度でダウンロード処理が完了し、S3にmp4が作成されます。
Alexa Skillを設定
次にAmazon Developer Consoleから新しくスキルを追加します。
設定内容の一部をスクショで掲載します。
「スキルの名前」はスキルの呼び出し名になりますので、この場合だと
「アレクサ、浦ラジを開いて」
と発音するとstatehandler
内のLaunchRequest
インテントが実行され、そこからPlayAudio
インテントが実行されることで、S3上のmp4をAmazon Echoで再生できるというわけです。
あとはSkill Beta Testingから、自分のアカウントで動かせるようにすれば、Amazon Echoで浦ラジを再生する環境のできあがりです!
やっと思ってた形になったわー pic.twitter.com/s5xtHtgVkN
— Takafumi Yoshida (@zephiransas) 2017年12月13日
うまくいけば上記のようになります。
残念ながらAmazon Echoはまだ招待メールを受け取った人しか買えない状況ではありますが、お手元にAmazon Echoがある人は是非お試しください!