-->

perl mpg123 再生メモ

cygwin

mpg123+perl+w3m;

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`;
 }
}