FC2ブログ

2015年05月の記事 (1/1)

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

音楽ファイルを不可逆圧縮から別の不可逆圧縮に再圧縮するとね

オーディオおたく入れ食い


不可逆圧縮ってダメだっていうじゃないですか。
音が劣化するっていうはなし。
でも、劣化だっていうほど劣化するかなと。

オーディオおたくは、これを、どう思っているのか。
彼らは天使の心音も聞こえる部族。
エンジェルビーツですね。

前置き長くて、すみません。、
不可逆圧縮がどれだけダメか、試したくなりました。
wmaとmp3の間を行ったり来たりさせて、劣化させます。
オーオタ入れ食いのダメダメ連呼企画。
でも、劣化するする言われて、するする詐欺。
私は、その結果を聞いたことがありません。
簡単なので、やってみました。

もうダメですか、オーオタさん、気が早い。


はい。おまちどお


まずは、1往復の音声
ソースは、うちで一番古そうなCD。

圧縮は、ffmpegのwmav2とmp3lameでやりました。
この2つの間を行ったり来たりします。
192kの固定長です。


はい、このファイル、ソースではありません。
なんで、ソースはダメなのかというと、容量の問題。
そりゃ、いっぺん圧縮しないとダメに決まってます。

それと、このサンプル、著作権的には……あれ、だめっぽい?
できれば、通報しないでね。


10往復


はい、10往復の音声

正直こんなに速くダメになるとは思いませんでした。
なんかこう、シャンシャン、ノイズが入っています。

不可逆圧縮って、こんなにダメなのね。
もうちょっと頑張れるかと思ってたのに、期待外れ。

でも、考えようによっては、聞きやすくなってません?
ノイズもたんぽぽの綿毛のように、風流ですよ。



1000往復


はい、1000往復の音声

なんかすごい。

デジタル化の波が激しさを増す昨今。
ノイズを聞くことなど、少なくなっております。
そこへ、これはなんだ。
ノイズ源?

貝殻から、波の音が聞こえるていうあれ?
つまり、デジタル貝殻?

あと、このファイル、なんで長くなってるの?
飽きたので、そこは追及せずに終わります。
スポンサーサイト

まどマギクリッカー 魔に魅入られし虚ろな影

まどマギクリッカーをやってる人がまだいるみたい。
私は、もう飽きたんで、やってません。

私がどうやってクリアしたか、簡単にかきますね。
みなさんが、私を超えていくことを、激しく期待しています。

まずスクショ。
まどってまぎって


まどかさん、34,500人です。
このくらい普通ですよね。
逆にやる気がわいてくる感じ。


やり方について書こうと思った……んですけど。
懇切丁寧に伝授するのはやりすぎ。
教えすぎはネタバレです。


私が使ったツールは2つ。
「うさみみハリケーン」
「UWSC」

OKOK。みなまで言うな。
これだけ分かれば、すぐですよね。

それでは、健闘を期待しております。
いいスコアがでたら、コメントに書いてください。
くださるとうれしいですよ。
ぜひ書いてね。


それでは、らたまいしゅ~

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

PCで日頃やってることを自動化するお話です


自動化しますよ。バリバリと。
何が私を突き動かすのか。
いい加減な私でも、切迫していることがあるんですよ。
つい先日、出禁を食らったあの件。
はっきり言うと、超!A&G+の録音・録画です。
  

ここでは、何回かに分けて、私の活躍を紹介……
などと言うほどのものでもない、私の日記です。
私、実はプログラマじゃないので、その点はご容赦ください。



先にKoRecさんの件を


先日出禁を食らったわけですけど、期限があると思ったんですよ。
でも、もう何日もたつんですけど、変化有りません。

例えばこれ。
-clean オプションをつけて、掃除をしようと思いましたが。
Microsoft Windows [Version 6.3.9600]
(c) 2013 Microsoft Corporation. All rights reserved.

C:\Users\Public\Documents\radio>korec -clean
=== Exception at 2015/05/21 18:57:28 ===
System.TypeInitializationException : 'ah' のタイプ初期化子が例外をスローしました。

*use -v option to show debug information


C:\Users\Public\Documents\radio>korec -clean -v
=== Exception at 2015/05/21 18:57:37 ===
System.TypeInitializationException : 'ah' のタイプ初期化子が例外をスローしました。

*use -v option to show debug information


C:\Users\Public\Documents\radio>korec -h
=== Exception at 2015/05/21 18:57:56 ===
System.TypeInitializationException : 'ah' のタイプ初期化子が例外をスローしました。

*use -v option to show debug information


C:\Users\Public\Documents\radio>
エクセプションよ!(CV:山崎はるか)
helpもだめ。verboseは、もっとだめ。
まあ、サーバにつなげないんだから仕方ない。

つか、そもそもこれ、おかしくないですか。
サーバにいろいろ晒してから、はじめて起動できる。
もちろん、ピンポイントで私を捕捉できる。
ずばり、スパイウェアじゃないですか。

長くなったかな。ぐちはここまで。


まず、解より始めよ


超!A&G+の録音録画の第一歩は、番組表の攻略から始めました。
だって、自動化で一番難しいのは、ファイル名の自動付与じゃないですか。


私は、文化放送の番組表そのものから、持ってくることにしました。
文化放送の番組表を全選択、表計算ソフトに貼り付け。
そして、CSV形式で保存したのがこれ。
6,"06:00ツブ★ドル ユメカナラジオ!? ","06:00れい&ゆいの文化放送ホームランラジオ!松嵜麗、渡部優衣 ","06:00伊福部崇の ラジオのラジオ伊福部崇 ","06:00桃園ひめこ・巴奎依のライトノベル学園桃園ひめこ、巴奎依 ","06:00金の卵石井璃里子、熊谷正弥、馬場惇平 ","06:00超!モバイル A&G presents 生放送 ","06:00超!A&G+ スペシャル"
,"06:30木戸衣吹・エリイ ゆめいろ学院木戸衣吹、山崎エリイ ","06:30のざP・松永真穂の ライブドッグ野崎圭一、松永真穂 ","06:30bamboo(milktub)、上田朱音 ","06:30今村彩夏 STAY GOLD今村彩夏 ","06:30高垣彩陽の あしたも晴レルヤ高垣彩陽 ",,
7,"07:00三上枝織の A&G NEXT GENERATION Lady Go!!三上枝織 ","07:00上坂すみれの A&G NEXT GENERATION Lady Go!上坂すみれ ","07:00小松未可子の A&G NEXT GENERATION Lady Go!!小松未可子 ","07:00大久保瑠美の A&G NEXT GENERATION Lady Go!!大久保瑠美 ","07:00高森奈津美の A&G NEXT GENERATION Lady Go!!高森奈津美 ","07:00アニアモ!川上莉央、立花理香 ","07:00岩田光央・鈴村健一 スウィートイグニッション岩田光央、鈴村健一"

かなりもじゃもじゃですけど、これでもまだいい方。
切り分け方がなんとなくわかりますからね。

そんで、これが自作フィルタにかけた結果
土曜日04時00分 放送休止*4
土曜日03時30分 角元明日香の本気!アニラブ角元明日香*1
土曜日03時00分 A&G NEXT BREAKS 吉田有里のFIVE STARS*1
土曜日02時30分 カスタマイZのハジメマシタカスタマイZ*1
土曜日02時00分 木戸衣吹・エリイ ゆめいろ学院木戸衣吹、山崎エリイ*1
土曜日01時30分 「黒子のバスケ」 放送委員会小野賢章、小野友樹*1
土曜日01時00分 逢坂市立花江学園 ~Radio逢坂良太、花江夏樹*1
土曜日00時30分 吉野裕行FC吉野裕行*1
土曜日00時00分 羽多野・寺島 Radio 2D LOVE*1
金曜日23時30分 有限会社 チェリーベル櫻井孝宏、鈴村健一、松来未祐*1
金曜日23時00分 小野大輔・近藤孝行の 夢冒険~Dragon&Tiger小野大輔、近藤孝行*1
金曜日22時30分 EMERGENCY the RADIO*1
金曜日22時00分 れいちゃんねる!Ray ※隔週生放送*1
金曜日21時30分 ジェンガでナイト!*1
金曜日21時00分 黒崎真音のRADIO RONDO ROBE~妄想王女の単独電波~黒崎真音*1
意外ときれいになった。
でも、まだ、誰がやってる番組か区別できてない。
CSVだとこれが限界かもしれないです。

こうなったら、生のHTMLから生成するしか。

そこまで考えて気づきました。
この番組表、年に4回しか変わらないよね。
しかも、1年後には、フォーマットが変わっているかも。

モチベーションをやられました。
とりあえずはピットイン。


でもまた頑張りますよ


やっぱり、htmlから処理しようと思います。
こつこつやりますよ。
なんだか、面白くなってきちゃいました。
パズルみたいなもんですからね。
趣味としても悪くないかな。



ちょっとちょっとタイトルが入ってないよ!


いくら生データを持って来ようとしても、間違ってちゃね。
確か、「X-RADIO」だった、かな?
私は書き直さないことにしました。


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

KoRecさんに出禁をくらいました


ですので、このシリーズはおしまい。


**********************************************
Arugoworks KoRec Version:2.4.5.3
=== 2015/05/17 1:27:09 ===
**********************************************

**********************************************
Arugoworks KoRec Version:2.4.5.3
=== 2015/05/17 1:27:09 ===
**********************************************

=== Exception at 2015/05/17 1:27:09 ===
=== Exception at 2015/05/17 1:27:09 ===
System.MissingMethodException : メソッドが見つかりません: 'System.Threading.Tasks.Task`1 Arugoworks.KoRec.IOUtils.GetXElementAsync(System.String, System.Net.CookieContainer)'
System.MissingMethodException : メソッドが見つかりません: 'System.Threading.Tasks.Task`1 Arugoworks.KoRec.IOUtils.GetXElementAsync(System.String, System.Net.CookieContainer)'
場所 r.d(Version A_0)
場所 y.w()
場所 af.a(String[] A_0)
場所 w.a(String[] A_0)

=== Exception at 2015/05/17 1:27:09 ===
System.IO.IOException : 別のプロセスで使用されているため、プロセスはファイル 'C:\Users\Public\Documents\radio\20150517012709agqr.log' にアクセスできません。
場所 System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
場所 System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost)
場所 System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, FileOptions options, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost)
場所 System.IO.StreamWriter.CreateFile(String path, Boolean append, Boolean checkHost)
場所 System.IO.StreamWriter..ctor(String path, Boolean append, Encoding encoding, Int32 bufferSize, Boolean checkHost)
場所 System.IO.StreamWriter..ctor(String path, Boolean append, Encoding encoding)
場所 ag.f(String A_0)
場所 ag.f()
場所 y.w()
場所 af.a(String[] A_0)
場所 w.a(String[] A_0)

なんで出禁になったのかは、これでも見てください
私は、RTMPDumpをいじってみようと思っています。

それでは、ソーロン!

アニラジを録音・録画・保存する方法……のメモ(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
【 】洲崎西
【 】中村繪里子
【 】花澤香菜
【 】お時間よろしいですか
【 】新番組
【 】津田のラジオ
【 】由佳・ありさ・未奈未
【 】高垣彩陽
【 】今村彩夏
【 】野水いおり
【 】豊崎愛生
【 】三澤紗千香
【 】村川梨衣
【 】長縄まりあ
【 】金田朋子
【 】みなとそふと
【 】高橋美佳子
【 】木戸衣吹
【 】姫イド隊
【 】進化論
【 】ライトノベル
【 】飯田里穂
【 】内田真礼
【 】エジソン
【 】こむちゃ
【 】ハルカス
【 】ラフラフ
【 】あどりぶ
【 】青春学園
【 】セハガール
【 】ラジオどっとあい
【 】セカンドショットアワー
【 】進化論
【 】丹下桜

*今やってる番組は、今から録っても手遅れよ
*これでいいかな?
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。