SonicStage CPを使ってPSPgoへの楽曲転送を試みたが、PSP転送を選ぶと何故か空き容量の認識がおかしくなってしまう、というのが前回までの問題点。切り分けによってソフトの不具合と判断したので、SonicStageを転送ツールとして使うのをやめるか、PSP転送をやめて通常転送を使うか。PSP転送の場合は楽曲がMUSICフォルダの下に人間がわかるような体系で転送される。通常転送だとウォークマンなどと同様に、OMGAUDIOフォルダに機械的な体系で転送される。前者は本体メモリへのコピーが可能だが後者は不可。本体にコピー出来ないとSensMeでも利用出来ない。
選択肢たりうるのは『Media go』なのだが、Media goの最大の問題点はATRAC3に対応していない事。ATRAC3で構築したSonicStageのライブラリ・フォルダをMedia goへ追加しても取り込んでくれない。ファイル指定で直接ファイルを開くと再生は可能。一方、SonicStage CPからPSP転送したファイルを、ドラッグ・アンド・ドロップでMedia goへ取り込む事は可能。両者の違いを見比べてみると、SonicStageのライブラリはomaファイルで、PSP転送したデータはaa3ファイル。ググって見るとomaをaa3に書き換えれば認識するという情報を発見。
試しにハンドでomaという拡張子をaa3に書き換えて取り込み処理をしてみるが上手くいかない。ファイルを指定して開くと再生は可能。改めてSonicStageライブラリとPSP転送フォルダを見比べてみると、拡張子の違い以外に『m3u』ファイルが存在する事に気付いた。このファイルは単純なテキスト・ファイルでフォルダ内の楽曲ファイルを順に並べているだけ。ちょっと調べてみるといわゆるプレイリストに使うようなファイルで、ここに記載した順に再生してくれるらしい。ものは試しと、SonicStageライブラリにて拡張子をaa3に変換してm3uファイルを以下のように準備してみる。
C:SONICSTAGE_ROOTアルバム名01_楽曲1.oma
C:SONICSTAGE_ROOTアルバム名02_楽曲2.oma
C:SONICSTAGE_ROOTアルバム名03_楽曲3.oma
:
というディレクトリ構成のときに、拡張子をaa3に変換して以下のファイルを作成。
※文字コードはutf8で、改行コードはCR+LF。
C:SONICSTAGE_ROOTアルバム名アルバム名.m3u
001_楽曲1.aa3
002_楽曲2.aa3
003_楽曲3.aa3
:
以上を仕込んだ上でSonicStageライブラリをMedia goのライブラリに追加してみると・・・取り込み始めてくれた!取り込んでしまいさえすれば、Media goは本体メモリでもM2側のメモリでも転送可能なのでメチャメチャ快適。とはいえライブラリが膨大だと、この変換作業は非常に手間だ。うちの場合はライブラリが共有ファイルサーバ上にありLinuxからもアクセス可能なので、スクリプトで一気に拡張子変換とm3uファイル自動生成を行っている。フォルダやファイルに日本語とスペースが多用されているのでperlで処理している(シェルだと面倒)。細かい説明は省くが以下、参考までに。
use strict;
use Encode;
my $root_dir="/sonicstage_root";
opendir(DIR,$root_dir);
while(defined(my $dir=readdir(DIR))){
next if $dir =~ /^.{1,2}$/;
opendir SUBDIR, "$root_dir/$dir" or die "$dir:$!";
open(OUT,">$root_dir/$dir/$dir.m3u");
if(! -e "$root_dir/$dir/$dir.m3u"){
print "error : $dirn";
open(OUT,">>$root_dir/error.log");
}
while(my $file=readdir SUBDIR){
next if $file =~ /^.{1,2}$/;
if($file =~ /(.*).oma$/){
my $base=$1;
my $cur_file="$root_dir/$dir/$base.oma";
my $new_file="$root_dir/$dir/$base.aa3";
rename($cur_file, $new_file);
$file=$new_file;
}
if($file =~ /.aa3$/){
Encode::from_to($file, "Shift_JIS", "UTF8");
print OUT "$filern";
}
}
close(OUT);
closedir(SUBDIR);
}
closedir(DIR);