今さらながらですが、Raspberry Pi をアラーム(目覚まし)として使おうと思います。
音も鳴るようにしましたし、VPN サーバーを構築して常時電源入れたまんまになったので。。。
◆アラームとして求める要件
"mpd play" を cron に登録、、、でアラームとしては最低限、機能するんですが、それだけだとおもしろくないので。
時間になったらお知らせしてくれるのは当然として、下記三点を満たすものを目指します。
・好きな音をアラーム音として指定可能。
・最初は控えめな音量で、徐々に音量が大きくなる。
・一定時間経てば勝手に鳴り止む。
(ひょっとしたら、その場にいないかもしれないですし。鳴りっぱなしだと、近所迷惑なので。)
◆mp3 ファイルの再生
アラーム音としては、一旦 mp3 ファイルのみを考えます。
まずは mp3 ファイルを再生するために必要なパッケージをインストールします。
mpg123 コマンドは指定フレーム分だけ再生する、とかがオプション指定で出来るのでそれを利用します。
(↓おまけ1にて補足)
ただ、フレーム指定だと直感的に分かりにくいので、下記のようなラッパーのシェルを作りました。
mp3play.sh
使用方法としては、
・第一引数にmp3 ファイル
・第二引数に再生時間(秒数指定、0 なら最後まで再生)※
・第三引数に再生オフセット(秒数指定、0 なら最初から再生)※
を指定する感じです。
※ 数字以外、または省略時は 0 と解釈されます。
→ "Usage: mp3play.sh mp3-file [time] [offset]"
再生オフセットを微調整することでいきなりサビの部分から再生が出来ます。
◆音量の変更
alarm.sh
音量を変更するので、実行前の音量を prev_volume に退避し、終了時に元に戻しています。
第三引数以降は、上記で作った mp3play.sh にそのまま渡して、実行します。
その後、一定秒数ごとに 5% ずつボリュームアップさせ、100% までアップさせたら mp3play.sh が終了するのを待ち合わせます。
使用方法としては、
・第一引数に音量(%指定、0 ならその時のシステム音量)※
・第二引数にボリュームアップ間隔(秒数指定、0 ならボリュームアップしない)※
・第三引数にmp3 ファイル
・第四引数に再生時間(秒数指定、0 なら最後まで再生)※
・第五引数に再生オフセット(秒数指定、0 なら最初から再生)※
※ 数字以外、または省略時は 0 と解釈されます。
を指定する感じです。
→ "Usage: alarm.sh volume period mp3-file [time] [offset]"
◆スケジューリング登録
crontab コマンドで末尾に処理を追加します。
ボリューム10%からスタートし、2秒ごとにボリュームアップ、60秒後に停止、という引数で alarm.sh を実行させます。hoge.mp3 は任意のファイルを指定してください。
◆アラームの停止
現状、途中で止める方法がありません。(鳴り止むのを待つしかないです。)
どうしても止めたい場合は、
(んな事しなくても、電源抜いたらさすがに止まりますけどね。)
◆おまけ1
mp3 ファイルの再生には mpg123 コマンドでもいいですが、mpg321 コマンドでも可能です。
どっちを使ってもやりたいことは可能と思います。オプションが微妙に違いますが。
自分の環境では mpg123 コマンドのインストールには 316kB 必要でした。
top コマンドでCPU使用率を見ていると大体 14% 程度といったところでした。
一方、mpg321 コマンドのインストールにはその他のパッケージのインストールも必要で合計 5025kB 必要でした。
top コマンドでCPU使用率を見ていると大体 9% 程度といったところでした。
自分はディスク容量を取り、mpg123 の方を使用する事にしました。
ちなみに mpd で再生した場合のtopコマンドでのCPU使用率も14%程度でした。参考までに。
音も鳴るようにしましたし、VPN サーバーを構築して常時電源入れたまんまになったので。。。
◆アラームとして求める要件
"mpd play" を cron に登録、、、でアラームとしては最低限、機能するんですが、それだけだとおもしろくないので。
時間になったらお知らせしてくれるのは当然として、下記三点を満たすものを目指します。
・好きな音をアラーム音として指定可能。
・最初は控えめな音量で、徐々に音量が大きくなる。
・一定時間経てば勝手に鳴り止む。
(ひょっとしたら、その場にいないかもしれないですし。鳴りっぱなしだと、近所迷惑なので。)
◆mp3 ファイルの再生
アラーム音としては、一旦 mp3 ファイルのみを考えます。
まずは mp3 ファイルを再生するために必要なパッケージをインストールします。
$ sudo apt-get install mpg123
mpg123 コマンドは指定フレーム分だけ再生する、とかがオプション指定で出来るのでそれを利用します。
(↓おまけ1にて補足)
ただ、フレーム指定だと直感的に分かりにくいので、下記のようなラッパーのシェルを作りました。
mp3play.sh
#!/bin/bash
n_option=
k_option=
mp3_file=$1
time=$(($2))
offset=$(($3))
if [ ! -f "${mp3_file}" ]; then
echo "no such file : ${mp3_file}"
exit 1
fi
# 30s is about 1150frame
if [ ${time} -ne 0 ]; then
n_option="-n $((${time} * 38))"
fi
if [ ${offset} -ne 0 ]; then
k_option="-k $((${offset} * 38))"
fi
mpg123 ${n_option} ${k_option} "${mp3_file}" &> /dev/null
使用方法としては、
・第一引数にmp3 ファイル
・第二引数に再生時間(秒数指定、0 なら最後まで再生)※
・第三引数に再生オフセット(秒数指定、0 なら最初から再生)※
を指定する感じです。
※ 数字以外、または省略時は 0 と解釈されます。
→ "Usage: mp3play.sh mp3-file [time] [offset]"
再生オフセットを微調整することでいきなりサビの部分から再生が出来ます。
◆音量の変更
alarm.sh
#!/bin/bash
volume=$(($1))
period=$(($2))
prev_volume=`amixer get PCM | sed -n "s/.*\[\(.*\)%\].*/\1/gp" | head -n 1`
if [ ${volume} -ne 0 ]; then
amixer set PCM ${volume}% > /dev/null
else
volume=${prev_volume}
fi
shift 2
/home/pi/local/bin/mp3play.sh "$@" &
if [ ${period} -ne 0 ]; then
while [ ${volume} -lt 100 ]; do
sleep ${period}
volume=$((${volume} + 5))
amixer set PCM ${volume}% > /dev/null
done
fi
wait
if [ ${volume} -ne ${prev_volume} ]; then
amixer set PCM ${prev_volume}% > /dev/null
fi
音量を変更するので、実行前の音量を prev_volume に退避し、終了時に元に戻しています。
第三引数以降は、上記で作った mp3play.sh にそのまま渡して、実行します。
その後、一定秒数ごとに 5% ずつボリュームアップさせ、100% までアップさせたら mp3play.sh が終了するのを待ち合わせます。
使用方法としては、
・第一引数に音量(%指定、0 ならその時のシステム音量)※
・第二引数にボリュームアップ間隔(秒数指定、0 ならボリュームアップしない)※
・第三引数にmp3 ファイル
・第四引数に再生時間(秒数指定、0 なら最後まで再生)※
・第五引数に再生オフセット(秒数指定、0 なら最初から再生)※
※ 数字以外、または省略時は 0 と解釈されます。
を指定する感じです。
→ "Usage: alarm.sh volume period mp3-file [time] [offset]"
◆スケジューリング登録
$ cd /home/pi/local/bin/スクリプトを取得し、実行権限を付与します。
$ curl -O http://sstea.blog.jp/raspi/script/mp3play.sh
$ curl -O http://sstea.blog.jp/raspi/script/alarm.sh
$ chmod 755 mp3play.sh alarm.sh
crontab コマンドで末尾に処理を追加します。
$ crontab -e月曜日から金曜日の7時30分に実行させる設定が下記です。
ボリューム10%からスタートし、2秒ごとにボリュームアップ、60秒後に停止、という引数で alarm.sh を実行させます。hoge.mp3 は任意のファイルを指定してください。
: (略)
30 7 * * 1-5 /home/pi/local/bin/alarm.sh 10 2 "/home/pi/hoge.mp3" 60 0
◆アラームの停止
現状、途中で止める方法がありません。(鳴り止むのを待つしかないです。)
どうしても止めたい場合は、
$ killall mpg123とでもしてください。
(んな事しなくても、電源抜いたらさすがに止まりますけどね。)
◆おまけ1
mp3 ファイルの再生には mpg123 コマンドでもいいですが、mpg321 コマンドでも可能です。
どっちを使ってもやりたいことは可能と思います。オプションが微妙に違いますが。
自分の環境では mpg123 コマンドのインストールには 316kB 必要でした。
top コマンドでCPU使用率を見ていると大体 14% 程度といったところでした。
一方、mpg321 コマンドのインストールにはその他のパッケージのインストールも必要で合計 5025kB 必要でした。
top コマンドでCPU使用率を見ていると大体 9% 程度といったところでした。
自分はディスク容量を取り、mpg123 の方を使用する事にしました。
ちなみに mpd で再生した場合のtopコマンドでのCPU使用率も14%程度でした。参考までに。