Hair is dead. But today is wonderful.

主にコンピューター・電子工作・オーディオ関連の記事を書いています。

MENU

スマホとRaspberry Piを使ってスマートスピーカーを作ってみた(YouTube再生編)

f:id:toomath:20180909220652j:plain

 

以前、スマホとRaspberry Piを使って、スマートスピーカーみたいに音楽を再生する仕組みを作った記事を書きました。

 

www.toomath.net

 

このとき、mp3ファイルとして持っている曲じゃないと再生できないからいまいちだという話をしました。

 

今回、それに対する一つの解として、音声でYouTubeを再生する仕組みを作ります。

YouTubeは動画サイトですが、音楽も膨大な数が登録されていますので、これを使わせてもらいます。

 

Raspberry Piでスマホから受け取った音楽再生の指示を認識し、曲名や歌手名を取り出すところは前回までと同じです。

以降の流れは以下となります。

 

 

Pythonアプリでrequestsモジュールを使ってYouTubeを検索する

まず、前回の仕組みで言葉データから取り出した曲名や歌手名に合致するmp3ファイルが無いかを調べます。

あればそれを再生し、無い場合は、歌手名や曲名をキーワードとして、「”https://www.youtube.com/results?search_query=キーワード"」というURLを指定してrequestsモジュールのgetメソッドを呼び出します。

すると、YouTubeをキーワードで検索した結果を得ることができます。

 

PythonアプリでBeautifulSoupモジュールを使って検索結果を解析する

次に、YouTubeの検索結果を、BeautifulSoupモジュールを使って解析します。requestsを含め、この辺の処理は以下のWebページを参考にさせていただきました。

自作Python - Youtube検索プログラム

 

Pythonアプリからvlcを実行してYouTube動画をストリーミング再生する

検索で見つかった動画の「URL」が分かったら、それをvlcという動画プレイヤーに指定して再生します。subprocessモジュールのcallメソッドでvlcを呼び出します。

なお、vlcの引数には「動画のURL」だけでなく、「--no-video」、「vlc://quit」というオプションを指定します。

「--no-video」は映像の省略、「vlc://quit」は再生が終わったvlcプロセスを終了させることを意味します。

各オプションを指定する目的は以下です。

  • 今回使ったRaspberry Pi 2はそれほどパワーが無く、映像を再生すると処理が間に合わなくなるため、音声の再生だけにする
  • 再生終了後もvlcプロセスが残り続けると、音楽を再生するたびにvlcプロセスが増えていくため、再生が終わったら終了させる

以上で音声によってYouTubeを再生する仕組みを構築できました。

これで気になる「コロッケのうた」も聴き放題です!

 

たまにvlcによる再生に失敗することがありますが、突っ込んで調べることはできていません。URLだけを取り出して個別にvlcで再生することはできるので、何がいけないのか。。

今回、requestsモジュールやBeautifulSoupモジュールを使うと非常に簡単にWebの情報を取得・解析できることが分かり、とても勉強になりました。

 

今後は人口無能を組み込んで、自然対話みたいなことができる仕組みを考えていきたいと思います。いつになるやらですが。。