iTunesのライブラリをmp3に出力するスクリプト。

iTunesで管理している英語教材(CNNニュースダイジェスト)をCLIE TH55のAudio Playerで聞くために作成。プレイリストの作成方法は不明。作成されたmp3は\Palm\Programs\MSAUDIOに保存する必要がある。この中にサブディレクトリを作成しても認識されない。またmp3へのサンプリングレートは44.1Khzでないと、CLIEのAudio Playerでは再生できない。OLE経由ではiTunesエンコードの設定はできないのであらかじめ設定しておく必要がある。iTunesがOLEに対応しているのはすばらしいのだが、エンコーダーの設定ができない(特にビットレートの変更をスクリプト経由で行えない)のが大変残念。今のところ唯一の欠点か。

use strict;
use Win32::OLE;
use File::Copy;
use File::Basename;
#以下に指定されたフォルダに保存する。

my $mp3_folder = 'C:/Data/CLIEMP3';



my $itunes = new Win32::OLE( "iTunes.Application") or die 'bye';

#サンプリングレートは44Khzでないと、CLIEのAudio Playerでは再生できない。





#現在のエンコーダーを取得しておく。スクリプトの最後で戻しておくため。

my $current_encoder = $itunes->CurrentEncoder;

my $mp3_encoder = $itunes->Encoders->ItemByName('MP3 Encoder');

$itunes->LetProperty('CurrentEncoder', $mp3_encoder);





my $playlist = $itunes->Sources->Item(1)->PlayLists->ItemByName('CNN');

my $c = $playlist->Tracks->Count;



for(my $n = 1; $n <= $c; $n++){

    my $t = $playlist->Tracks->Item($n);



    my $operational_status = $itunes->ConvertTrack2($t);

    sleep 1 while $operational_status->InProgress;

    $t = $operational_status->Tracks->Item(1);



    my ($name, $path, $suffix) = fileparse($t->Location, qr{\.mp3});



    #指定されたフォルダにコピーする。

    copy($t->Location, "$mp3_folder/$name$suffix") or die "Copy failed: $!";

    #コピーされた後のmp3は不要なので削除する。

    $t->Delete;

}



$itunes->LetProperty('CurrentEncoder', $current_encoder);