Raspberry Piで音声ファイルを再生するPythonコードを作成したが、それをcron実行しても音声が再生されなかった。調べたところ、環境変数を設定する必要があった。cronでPythonスクリプトを実行して音声を再生させる手順をまとめておく。
環境
Raspberry Pi OS。
$ lsb_release -dr Description: Raspbian GNU/Linux 11 (bullseye) Release: 11 $ python3 -V Python 3.9.2
Pythonで音声ファイルを再生する
まずは音声ファイルをPythonで再生してみる。ここではPythonからVLCを使って再生する。そのために、PythonでVLCを制御するモジュールをインストールする。
$ pip3 install python-vlc
インストールされたバージョン。
$ pip3 show python-vlc Name: python-vlc Version: 3.0.16120 ...
以下のコードでスクリプトファイルと同じディレクトリにあるtest.mp3を再生できる。
import os import time import vlc script_dir = os.path.dirname(os.path.realpath(__file__)) media_path = os.path.join(script_dir, 'test.mp3') p = vlc.MediaPlayer(media_path) p.play() # 再生が終わるまで実行を継続する time.sleep(10)
cronでPythonコードを実行する
作成したスクリプトファイルtest.pyを~/appディレクトリ配下に配置して、cronで実行してみる。
$ crontab -e
ここでは以下のようにcronに設定を追加する。動作確認のために1分ごとに実行させて、ログファイル(test.log)を出力する。
* * * * * python3 ~/app/test.py > ~/app/test.log 2>&1
ただし、上記のようにcronで実行させても音声ファイルを再生できない。以下のエラーメッセージが出力される。
vlcpulse audio output error: PulseAudio server connection failure: Connection refused
cronで音声ファイルを再生する
cronで音声ファイルを再生できるようにするには、サウンドサーバであるpulseaudioが使用するディレクトリを環境変数PULSE_RUNTIME_PATHに設定する。今回は以下のようなシェルスクリプトのファイル(test.sh)をPythonスクリプトと同じディレクトリに作成し、cronで実行する。
#!/bin/sh export PULSE_RUNTIME_PATH="/run/user/$(id -u)/pulse" python3 ~/app/test.py
作成したスクリプトファイルに実行権限を付与しておく。
$ chmod u+x test.sh
このスクリプトファイルをcronで実行すると音声ファイルを再生できる。
$ crontab -e
動作確認のために以下のような設定をcronに追加する。こうすると1分ごとにPythonスクリプトが実行されて、音声ファイルが再生される。
* * * * * ~/app/test.sh
0 件のコメント:
コメントを投稿