ラズパイ:フォルダ内の音楽をランダム再生する

Python

ラズパイを使ってomxplayerでフォルダ内に保存された音楽ファイル(mp3, m4a等)をランダム再生する方法です。

omxplayerがインストールされていない場合は、以下のコマンドでインストールしてください。

sudo apt-get install omxplayer

実際に作ったプログラムは以下の通りです。
13行目の参照フォルダは音楽ファイルのみが保存されているフォルダを指定してください。

ターミナルで実行した場合、フォルダ内のファイル数、ファイル名、ランダムで選んだ番号などが表示されるようになっています。
参考にしてください。

実行イメージ

ファイル数: 15
         1-11 Tout Tout Pour Ma Cherie.mp3
         03 Chiquitita.mp3
         redOrBlack.mp3
         07 Dancing Queen & Waterloo.mp3
         ANNIE_SPECIAL_EDITION_Title11.mp4
         01 Dancing Queen.mp3
         06 Gimme Gimme Gimme.mp3
         02 Honey Honey.mp3
         lesMiserable.mp3
         04 Our Last Summer.mp3
         08 Time To Say Goodbye.mp3
         15 Amazing Grace.mp3
         01 勝つんだ!.mp3
         08 Mamma Mia.mp3
         05 I Have A Dream.mp3
8 曲目を再生
再生コマンド: omxplayer -o local /home/pi2/music/'lesMiserable.mp3'

解説
フォルダ内のファイル名はosコマンドlistdirで取得できます。
取得されるデータはリスト形式です。

使用例

files = os.listdir(フォルダパス)

filesにはfiles[0], files[1]…と連番でファイル名が保存されます。
filesの要素数すなわちフォルダ内のファイル数は、len関数で取得します。

len(files)

乱数と組み合わせて、取得したファイル名のうちの1つのファイル名添え字を決定します。

# 乱数で選曲
r = random
r.seed()
play_no = r.randint(0, len(files)-1)

omxplayerは以下のコマンドでターミナルからは呼び出せます。

omxplayer -o local パス名を含めたファイル名

例えば、以下のような文字列を作ってosコマンドpopenで呼び出せばいいわけです。

omxplayer -o local /home/pi/music/hogehoge.mp3

しかし、スペースを含む音声ファイル名の場合きちんと再生してくれませんでした。そこで文字列連結の際にファイル名の前後に’シングルクォーテーションをつけて文字列を生成するようにするときちんと動作しました。

実際のプログラム部分

cmd = "omxplayer -o local " + music_pass + "'" + file + "'"
result = os.popen(cmd).readline().strip()

わたしはcrontabで毎朝決まった時間にこのプログラムの実行を設定しておき朝の音楽として利用しています。
目覚ましなどにも利用できそうです。

コメント

タイトルとURLをコピーしました