Media goでランダム・プレイリスト

PSPgoへの転送ツールをMedia goに決定した。データフローはCDからNAC-HD1へ取り込み、それをATRAC形式でウォークマンへ転送。ウォークマンからSonicStage CPを使ってPCへ取り込む。PCに取り込まれたデータを前回作成したスクリプトで変換して、Media goに取り込むという流れ。Media goへの取り込みは、ライブラリ・フォルダへの追加設定で特に変更せずに決定すれば差分を取り込んでくれる。Media goに取り込まれたデータをしばらく放っておけば12音階分析を済ませてくれる。ここまで出来たら、PSPgoの本体メモリへ転送する事でSensMeにてAtracデータを再生できる。

しかし、SensMeは起動が遅い上、AVRCPに対応していないので、いろいろと使い勝手が悪い。音楽鑑賞→ちょこっとゲーム→音楽鑑賞と頻繁に切り替える使い方には不向き。再生方法も全曲シャッフルのみなので、何とかXMB上のミュージック・プレーヤで実現できないか調査してみる。Media goでプレイリストは作成可能なものの、ダイナミック・プレイリストは存在せず、SensMe用の12音階分析を元にしたプレイリストしか作成出来ない。アイデアに結び付きそうなヒントは既にあって、Media goに取り込む際に作成した『m3u』ファイルだ(ディレクトリ内の曲順を定義するファイル)。

Media goから普通にPSPgoへ転送すると、『Musicアーティスト名アルバム名』というディレクトリになるので、ディレクトリを越えられる『m3u』ファイルが作成できればよい。調べてみると『m3u8』ファイルがそのリクエストに応えてくれそう。ここにMusicディレクトリからのフルパスで、以下のように楽曲ファイルを記載していけば、ディレクトリを越えたプレイリストになるらしい。作成したファイルは『PSPPLAYLISTMusicxxxx.m3u8』みたいな感じで配置する。早速、数件でサンプル作ってみたところ期待通りの動き。更にシャッフルすればプレイリストに対してランダム再生を実行してくれる。

E:Musicアーティスト1アルバム101_楽曲1.aa3
E:Musicアーティスト1アルバム101_楽曲2.aa3
E:Musicアーティスト2アルバム305_楽曲5.aa3
                :

というディレクトリ構成のときに以下のファイルを作成。
※文字コードはutf8で、改行コードはCR+LF。
E:PSPPLAYLISTMusicsample.m3u8

Musicアーティスト1アルバム1楽曲1.aa3
Musicアーティスト1アルバム1楽曲3.aa3
Musicアーティスト2アルバム3楽曲5.aa3
        :

あとは全曲プレイリストを作成すればよいのだが、1500曲についてまともにやるのは不可能。少し頭を捻って、コマンド・プロンプトでファイル一覧を取得してみる事に。PSPgoの本体メモリがマウントされているドライブに移動して、

dir *.aa3 /b/a-d/s

というコマンドを叩けば、全曲のフルパスがコマンド・プロンプトに表示される。これをテキスト・エディタにコピペして、行頭にあるドライブ名を削除すれば完成。しかし、PSPgoはプレイリストも999曲までしか認識しない。そこで、この1500曲プレイリストを元に10パターンのランダム999曲『m3u8』ファイル生成スクリプトを作成。手間ばかりかかってる気もするけど、やっと並のメディア・プレーヤと同様のレベルになった。以下、参考までに。

use strict;

our @input;
our $file;
our @output;
our $loop=10;
our $source=$ARGV[0];

open(IN,"<$source");
@input = ;
close(IN);

my $count=0;
while($count<$loop){
    while(@output<999){
        my $i=int(rand($#input));
        $file=$input[$i];
        chomp $file;
        push(@output,$file);
        splice(@input,$i,1);
    }
    open(OUT,">shuffle$count.m3u8");
    for my $file(@output){print OUT "$file\n"};
    close(OUT);
    $count++;
    @input=@output;
    splice(@output,0);
}

コメントを残す

メールアドレスが公開されることはありません。

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)