perl mpg123 再生メモ
muili.
mpg123を使用して、@lに登録したディレクトリ下を再生させる。
※$l[0]は停止コマンド
ただこれだと、実行直後にmpg123にプロセスを奪われ(?)、C-Cしないと…正しく動作しない。
#!/usr/bin/perl
## local-cgi: w3m /cgi-bin/jukebox
$d='~/music';
@l=qw(-stop tw-bgm tv ux50/cbr128f);
$p=0;
$q=$ENV{'QUERY_STRING'};
if($q=~/^play=(\d+)/){
$p=$1;
}
if($p>0){
&start;
}else{
&stop;
}
&html;
##
sub html{
my $s='';
my $i=0;
foreach(@l){
$r=$p==$i?'*':'';
$s.=sprintf('<li><input type="radio" name="play" value="%d">%s</li>',$i,$_.$r);
$s.="\n";
$i++;
}
if($s){$s="<ul>\n$s</ul>\n";}
print<<END
content-type:text/html;charset=euc-jp\n\n
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=euc-jp">
<title>jukebox - $p - $q</title>
</head>
<body>
<form method="get" action="/cgi-bin/jukebox">
$s
<input type="submit" value="OK">
</form>
</body>
</html>
END
;
}
sub start{
&stop;
my $f="$d/".$l[$p];
`mpg123 -q $f/*.{mp,MP}3 &`;
}
sub stop{
my $pid=`ps -el |grep mpg123`;
if($pid){
$pid=~s/^\S+\s+(\S+)\s+.*/$1/;
`kill $pid`;
}
}