fc2ブログ

アニラジを録音・録画・保存する方法……のメモ(KoRec攻略編1)

いらっしゃいませ。またお会いできましたね



今回は、またもやラジオ録音ツールKoRecを取り上げます。
KoRecは、アニラジ関係の機能が盛りだくさん。
アニラジ好きには、なくてはならないかどうかは、さてお立合い。
この素晴らしさを味わわなくては損ですよ。

ただ、優秀なKoRecにも欠点があります。
「説明がよく分かんない」
「設定がめんどくさい」
これですよ。

私はこれを解決するために、一人旅立ちました。
アイスランドをさまよう日々。
温泉につかっては、立ちくらみを楽しんでいました。
つらく苦しい観光の後に待ち受けていたのは、プログラミング。

なぜ why?
いまさら、プログラミングだって、そりゃないぜジェーン。

しつこいですか。

ちょっと思いついたんですよ
KoRec補助ツールのアイデアがね。

その機能とは!
・設定リストに、番組名の一部を書いておく
・30毎にKoRecを起動するよう、タスクスケジューラを仕掛ける
・起動したときに、リストにある番組か判断する
・全自動で録音

なんとなく、いい感じじゃないですか。
今は、このコードのテストしているところです。
調子が良ければ、2~3日でお見せしましょう。

一応、ここに、ソースを置いておきます。
うわ。またPerlかよ。そうなんです。Perlなんです。
ただ、Perlをインストールしてなくて使う方法もあります。
PerlのEXE化です。
そっちは、今、研究中です。

ああ、手前味噌なことばっかり書いてすみません。
なんか、プログラミングが楽しくなっちゃって。

そんなこんなで、らたまいしゅう!



use strict;
use warnings;
use utf8;
binmode STDIN, ':encoding(cp932)';
binmode STDOUT, ':encoding(cp932)';
binmode STDERR, ':encoding(cp932)';

sub katto{
$_[0] =~ /^\s*(.*)\s*$/;

return $1;
}

sub dusk{
my %cfg = @_;

my $image;
my $pid;
my $sessionname;
my $session;
my $memusage;
my $stat;
my $username;
my $cputime;
my $windowtitle;
my $paipu;
my $tmpflag = 1;

while($tmpflag){
$tmpflag = 0;
open $paipu, "tasklist /FO CSV /NH /V |";
while(<$paipu>){
chomp;
$_ = Encode::decode('cp932', $_);
s/^\s*\"//;
s/\"\s*$//;
($image, $pid, $sessionname, $session, $memusage, $stat, $username, $cputime, $windowtitle) = split(/\Q","\E/,$_);
if($windowtitle =~ /JoyToTheWorld/i){
printf "*KoRec 発見 (+PID = $pid +WindowTitle = \"$windowtitle\")\n";
if((kill 9, $pid) || (kill 15, $pid)){
printf "*KILL シグナル送信成功\n";
}else{
printf "*KILLシグナル送信失敗\n";
printf "*taskkillも大雑把に放つ\n";
system('taskkill /F /T /FI "WINDOWTITLE eq JoyToTheWorld" >nul');
}
$tmpflag = 1;
}
}
close $paipu;
}
printf "*ログ消去\n";
unlink glob($cfg{logpath}.'\\*.log');
}




sub JoyToTheWorld{
my $dh00;
my $fh00;
my $keepvideo;
my $title;
my %cfg = @_;


&dusk(%cfg);

printf "*番組表取得タスク起動\n";
system("start \"JoyToTheWorld\" /REALTIME /MIN $cfg{korecpath}\\korec.exe -i agqr -margin $cfg{JTTW} -v -log -o $cfg{logpath} -LogFolder $cfg{logpath} -l auto -wait -ntp");

printf "*今から$cfg{JTTW}秒後の番組を調べるよ\n";
printf "*ログファイル出現待ち\n";
LASTLABEL:while(1){
opendir $dh00, "$cfg{logpath}" or die "肉じゃが作るよ : $!\n\n";
while($_ = readdir $dh00){
chomp;
/agqr\.log$/ and last LASTLABEL;
}
closedir $dh00;
sleep 1;
}

printf "*処理待ち\n";
$_ = "$cfg{logpath}\\$_";
while(-s $_ < 1300){
sleep 1;
printf "*-ログ容量 =%5d bytes, now.\n", -s $_;
}

$keepvideo = "";
printf "*ログ検索 \($_\)\n";
open $fh00, "<:utf8", $_;
while($_ = readline $fh00){
chomp;
if(s/^Title:\s*//i){
$title = $_;
}
if(s/^Keep video:\s*//i){
/Yes/i and $keepvideo = "-keepvideo";
last;
}
}
close $fh00;

printf "*$cfg{JTTW}秒後は";
printf "【$title】らしい\n";

&dusk(%cfg);

return $title, $keepvideo;
}


sub kkorec{

my %cfg;
my $fh00;

my $title00;
my $title01;
my $keepvideo00;
my $keepvideo01;

my $tmpflag;
my $tmpline;
my $tmpgo;



printf "================================================\n";
my ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = localtime(time);
$year += 1900;
$mon += 1;
printf " ${year}年${mon}月${mday}日 ${hour}時${min}分${sec}秒\n";
printf " の定時巡回です\n";
printf "================================================\n";
printf "\nCFG読出し\n";
open $fh00, "<:utf8", "kkorec.ini" or die "No ini file : $!";
$tmpflag = 0;
while($_ = readline $fh00){
if(/\[(\d+)\]/i){
if("config" eq lc($1)){
$tmpflag = 1;
}else{
$tmpflag = 0;
}
}elsif($tmpflag = 1){
s/;.*$//;
if(/^\s*(.*)\s*=\s*(.*)\\?\s*$/){
$cfg{lc($1)} = $2;
}
}
}
close $fh00;

printf "\n\n*** 番組表チェック 1 ***\n";
($title00, $keepvideo00) = JoyToTheWorld(%cfg, 'JTTW' => "$cfg{margin0}");
printf "\n\n*** 番組表チェック 2 ***\n";
($title01, $keepvideo01) = JoyToTheWorld(%cfg, 'JTTW' => "$cfg{margin1}");

printf "\n";
printf "*番組リスト読み出し\n";
open $fh00, "<:utf8", "kkorec.ini" or die "No ini file : $!";
$tmpgo = 0;
$tmpflag = 0;
while($_ = readline $fh00){
s/;.*$//g;
$_ = &katto($_) or next;
chomp;
if(/\[(\w+)\]/){
if("program" eq lc($1)){
$tmpflag = 1;
}else{
$tmpflag = 0;
}
}elsif($tmpflag == 1){
$_ = &katto($_) or next;
defined($_) or next;
if($title00 =~ /$_/i){
$tmpgo = 1;
printf "【●】$_ ★HIT! $keepvideo00\n";
}else{
printf "【 】$_\n";
}
}
}
close $fh00;

printf "\n";
if($title00 eq $title01){
printf "*今やってる番組は、今から録っても手遅れよ\n";
}else{
if($tmpgo == 1){
printf "*次の番組を";
if($keepvideo00 eq "-keepvideo"){
print "録画";
}else{
print "録音";
$keepvideo00 = "";
}
printf "するよ\n";
printf "*【$title00】\n*KoRecは待機中\n";
system("start \"Tinkle\" /REALTIME /MIN $cfg{korecpath}\\korec.exe -i agqr -margin $cfg{margin0} -v -log -o $cfg{logpath} -LogFolder $cfg{logpath} -l auto -wait -ntp $keepvideo00");
}else{
printf "*今回は見送りする\n";
}
}
print "*これでいいかな?\n";
}
kkorec;



結果も載せておきますね

================================================
2015年5月12日 22時4分55秒
の定時巡回です
================================================

CFG読出し


*** 番組表チェック 1 ***
*ログ消去
*番組表取得タスク起動
*今から1800秒後の番組を調べるよ
*ログファイル出現待ち
*処理待ち
*ログ検索 (..\arc\20150512220458agqr.log)
*1800秒後は【RADIO 4Gamer Tap(仮)】らしい
*KoRec 発見 (+PID = 7024 +WindowTitle = "JoyToTheWorld")
*KILL シグナル送信成功
*ログ消去


*** 番組表チェック 2 ***
*ログ消去
*番組表取得タスク起動
*今から300秒後の番組を調べるよ
*ログファイル出現待ち
*処理待ち
*ログ検索 (..\arc\20150512220505agqr.log)
*300秒後は【RADIO 4Gamer Tap(仮)】らしい
*KoRec 発見 (+PID = 8028 +WindowTitle = "JoyToTheWorld")
*KILL シグナル送信成功
*ログ消去

*番組リスト読み出し
【 】CATCH
【 】FIVE STARS
【 】GENERATION
【 】Lady
【 】アニラブ
【 】内田さんと
【 】東山奈央
【 】井口裕香
【 】阿澄佳奈
【 】竹達彩奈
【 】ごぶごぶ
【 】ありがた系
【 】りめいく!
【 】えじまる
【 】井上麻里奈
【 】早見沙織
【 】初ラジ
【 】久保ユリカ
【 】TRYangle
【 】洲崎西
【 】中村繪里子
【 】花澤香菜
【 】お時間よろしいですか
【 】新番組
【 】津田のラジオ
【 】由佳・ありさ・未奈未
【 】高垣彩陽
【 】今村彩夏
【 】野水いおり
【 】豊崎愛生
【 】三澤紗千香
【 】村川梨衣
【 】長縄まりあ
【 】金田朋子
【 】みなとそふと
【 】高橋美佳子
【 】木戸衣吹
【 】姫イド隊
【 】進化論
【 】ライトノベル
【 】飯田里穂
【 】内田真礼
【 】エジソン
【 】こむちゃ
【 】ハルカス
【 】ラフラフ
【 】あどりぶ
【 】青春学園
【 】セハガール
【 】ラジオどっとあい
【 】セカンドショットアワー
【 】進化論
【 】丹下桜

*今やってる番組は、今から録っても手遅れよ
*これでいいかな?