daemontools と mpg123 を利用した mp3 player

back


daemontools を「システム管理だけに使うもの」と思ってはいませんか?

daemontools は、一般ユーザ権限で起動したデーモンを 制御するためにも使えます。ここではその特徴を利用し、 mpg123 をデーモンに見立ててお手軽にシェルから リモート操作できるようにしてみました。 機能は質素なものですが「手軽に mp3 を聞きたい、 でもキーボードから手を離したくないし、 余計なウインドウも出したくない」 という人には向いているでしょう。

アイデア

supervise は、自分の監視しているデーモンが終了すると、 1秒後に立ち上げなおします。これを利用して、supervise に mpg123 を起動させるようにしておけば、とくに何も指定せずとも 曲をリピートさせることが可能です。run スクリプトの 中で mpg123 にプレイリストを渡すようにしておけば、svc を使って 以下のような制御が行えます:

こいつはなかなかウマーな特徴でしょう。 以下にその手順を示します。


1. 適当なところに supervise 用のディレクトリを作る。

ここでは /home/yusuke/.mp3play とします。

$ mkdir /home/yusuke/.mp3play

2. run スクリプトを書く。

run スクリプトはこんだけです:

#!/bin/sh
exec mpg123 `cat /home/yusuke/.mp3play/list`

これを .mp3play ディレクトリに実行可能な状態で 置いておきます。


3. 起動時に supervise を自動的に走らせるようにする。

supervise は排他制御を行うので、2度 supervise を起動しても 2つ同時に走ってしまうことはありません。 だからまあこれはどこで起動してもいいです。 (注意: svscan を使う必要はないでしょう)

ぼくは自分の .xinitrc で走らせることにしました。 以下のような行を追加します:

supervise /home/yusuke/.mp3play >/dev/null 2>&1 &


4. touch down しておく。

supervise は起動した瞬間に run を 実行しようとしますが、起動したらいきなり曲が鳴り出すとビビリます(経験済)。 そのため、あらかじめ /home/yusuke/.mp3play に 空の down ファイルを作っておきましょう。 こうすると supervise は svc -d されたのと同じ状態から 開始します。

$ touch /home/yusuke/.mp3play/down

この時点で /home/yusuke/.mp3play/ はこうなっています:

$ ls -l /home/yusuke/.mp3play
-rw-r--r--    1 yusuke          0 Feb 10 15:47 down
-rwxr-xr-x    1 yusuke         46 Feb 10 15:40 run

5. 制御用スクリプトを書く。

最後に、適当なディレクトリに演奏のためのシェルスクリプトを置きます:

#!/bin/sh
SVCDIR=/home/yusuke/.mp3play

# stop playing first.
svc -d $SVCDIR

# immediately return if no file is specified.
if [ ! "$1" ]; then exit; fi

# put the files into the playlist.
find "$@" -name '*.mp3' | sort > $SVCDIR/list

# restart playing.
svc -u $SVCDIR

このスクリプトは指定されたディレクトリ以下にある *.mp3 ファイルをすべてプレイリストに追加し 演奏を開始させるものです。自動的にリピートされるのが気にいらない人は、 最後の svc -usvc -o にしておきましょう。

これを mp とかいう名前にでもしておけば、

$ mp /mp3/sc
などとして /mp3/sc/ 以下の mp3 ファイルをすべて 演奏させることができます。

ほかにも、お好みに応じて以下のようなエイリアスなり シェル関数なりを追加するといいでしょう:

alias first='svc -t /home/yusuke/.mp3play' # play from the beginning of the list
alias once='svc -o /home/yusuke/.mp3play'  # play once
alias rept='svc -u /home/yusuke/.mp3play'  # play repeatedly
alias stop='svc -d /home/yusuke/.mp3play'  # stop playing
alias next='svc -i /home/yusuke/.mp3play'  # play the next one

6. Enjoy!

supervise のおいしいところは、 svc -o (once) と svc -u (repeat) が途中でシームレスに切りかえられることです。最初に svc -o で起動しておいて、演奏中に気が変わっても svc -u を実行すればそのままリピートモードになってくれます (逆もまたしかり)。

欠点:


Last modified: Sat May 18 16:35:20 2002

Yusuke Shinyama