以前、スマホとRaspberry Piを使ってスマートスピーカーみたいに音楽を再生する仕組みを作りました。
しかし、mp3ファイルとして持っている曲じゃないと再生できないのでいまいちでした。
今回それに対する一つの解として音声でYouTubeを再生する仕組みを作ります。
YouTubeは動画サイトですが音楽も膨大な数が登録されていますので、これを使わせてもらいます。
Raspberry Piでスマホから受け取った音楽再生の指示を認識し、曲名や歌手名を取り出すところは前回までと同じです。
以降の流れは以下となります。
- Pythonアプリでrequestsモジュールを使ってYouTubeを検索する
- PythonアプリでBeautifulSoupモジュールを使って検索結果を解析する
- Pythonアプリからmpvを実行してYouTube動画をストリーミング再生する
Pythonアプリでrequestsモジュールを使ってYouTubeを検索する
まず、前回の仕組みで言葉データから取り出した曲名や歌手名に合致するmp3ファイルが無いかを調べます。
あればそれを再生し、無い場合は歌手名や曲名をキーワードとして「”https://www.youtube.com/results?search_query=キーワード"」というURLを指定してrequestsモジュールのgetメソッドを呼び出します。
すると、YouTubeをキーワードで検索した結果を得ることができます。
PythonアプリでBeautifulSoupモジュールを使って検索結果を解析する
次に、YouTubeの検索結果を、BeautifulSoupモジュールを使って解析します。requestsを含め、この辺の処理は以下のWebページを参考にさせていただきました。
Pythonアプリからmpvを実行してYouTube動画をストリーミング再生する
検索で見つかった動画の「URL」が分かったら、それをmpvという動画プレイヤーに指定して再生します。subprocessモジュールのcallメソッドでmpvを呼び出します。
私は以下のように呼ぶようにしました。
mpv --audio-device=alsa/plughw:CARD=Device,DEV=0 --no-video <URL>
「--audio-device」は音声デバイスの指定、「--no-video」は映像の再生抑止です。
なお、mpvを導入にあたって以下のコマンドを実行しました。
sudo apt-get install mpv
sudo pip install --upgrade youtube_dl
以上で音声によってYouTubeを再生する仕組みを構築できました。
これで気になる「コロッケのうた」も聴き放題です!
当初、mpvではなくvlcを使っていましたがどうも再生できないことが多いため、mpvに変更したところ問題なく再生できるようになりました。
今回、requestsモジュールやBeautifulSoupモジュールを使うと非常に簡単にWebの情報を取得・解析できることが分かり、とても勉強になりました。
今後は人口無能を組み込んで自然対話みたいなことができる仕組みを考えていきたいと思います。いつになるやらですが。。