#!/usr/bin/perl # CD Audio to MP3 helper script version 1.0PR # Copyright (C) 2004 YUU Kogetsu ALL RIGHTS RESERVED # http://turquoise.is.dreaming.org/ # # ※使用上の注意 # このソフトウェアの使用に伴い発生したいかなる事故、損害等も、 # 作者は一切責任を負いません。 # また、このソフトウェアが直接的、間接的に利用している # 他のソフトウェアについては、それぞれの使用許諾表示に従ってください。 # <設定部> # ご自分の環境に合わせて適宜変更してください。 # ↑1行目の Perl へのパスもお忘れなく。 # cdcontrol へのパス $CDCONTROL = '/usr/sbin/cdcontrol'; # dd へのパス $DD = '/bin/dd'; # gogo(午後のこ〜だ)へのパス $GOGO = '/usr/local/bin/gogo'; # gogo によるエンコード時のビットレート $GOGO_BITRATE = '160'; # CD-ROM デバイスファイル名 $CDDRV = 'acd0c'; # <処理部> # これ以降を変更すると正常に動作しなくなったり、 # 重要なファイルを消してしまう等の事故を引き起こすおそれがあります。 # 十分に理解できる方以外は変更をご遠慮ください。 $VER = '1.0PR'; $NODEL = 0; # raw ファイルを消さないでフラグ 0:消す 0以外:消さない $NOENC = 0; # エンコードしないでフラグ 0:する 0以外:しない # なお、$NOENC フラグがたっている時は # 自動的に $NODEL フラグもたちます。 # コマンドライン引数取得 # -b=[GOGO_BITRATE] : 午後のこ〜だエンコード時のビットレートを指定 # -d=[CDDRV] : CD-ROM ドライブのデバイスファイル名を指定 # -nd, --no_delete : raw ファイルを消さない # -ne, --no_encode : エンコードしない # -h, --help : ヘルプを表示 foreach (@ARGV) { if (/^-*b=.+/) { ($DUST,$GOGO_BITRATE) = split("=", $_); } if (/^-*d=.+/) { ($DUST,$CDDRV) = split("=", $_); } if (/^-*nd$/ || /^-*no_delete$/) { $NODEL = 1; } if (/^-*ne$/ || /^-*no_encode$/) { $NOENC = 1; $NODEL = 1; } if (/^-*h$/ || /^-*help$/) { &showUsage; exit; } } &showOpening; open(IN, "$CDCONTROL -f /dev/$CDDRV info |"); @info = ; close(IN); $lines = @info; &getTrks; ©Trks; if ($NOENC == 0) { &encTrks; } if ($NODEL == 0) { &delTrks; } &showEnding; ################################################## # CD からオーディオトラック番号を取得 sub getTrks { foreach (@info) { if ($_ =~ /audio$/) { push(@audioline,$_); } } for ($line = 0; $line < @audioline; $line++) { @audioline[$line] =~ s/^\s+//; @audioline[$line] =~ s/\s\s+/ /g; (@audiotrks[$line]) = split(/\s/,@audioline[$line]); } $trks = @audiotrks; print "$trks audio track(s) detected.\n"; return @audiotrks; } ################################################## # CD-DA から *.raw を作成 sub copyTrks { foreach (@audiotrks) { $trkNo = sprintf("%03d",$_); print "\ncopy track $_ to track$trkNo.raw ...\n"; print "--------------------------------------------------\n"; system("$DD if=/dev/acd0t$_ of=track$trkNo.raw bs=2352"); print "--------------------------------------------------\n"; } } ################################################## # *.raw から MP3 を作成 sub encTrks { foreach (@audiotrks) { $trkNo = sprintf("%03d",$_); print "\nencode track$trkNo.raw to track$trkNo.mp3 ...\n"; print "--------------------------------------------------\n"; system("$GOGO -offset 0 -b $GOGO_BITRATE track$trkNo.raw"); print "--------------------------------------------------\n"; } } ################################################## # *.raw ファイルを削除 sub delTrks { print "\n"; foreach (@audiotrks) { $trkNo = sprintf("%03d",$_); print "delete track$trkNo.raw ...\n"; if (unlink("track$trkNo.raw") == 0) { print "can't delete track$trkNo.raw."; } } } ################################################## # 簡易ヘルプを表示 sub showUsage { &showOpening; print <