フリーバトルで堅いけど魔力低いし遅いナイトを堅くて魔力高くて速いダークナイトで嬲り殺す日々, これをいじめと言わずして何と言えるのだろうか
…てか, そうでもしないとこういうのが苦手な狐にはSなんて取れないのですよ
Comments (0):
家にあったwav音源をoggだけでなくmp3も作るようにして, PSPに放り込んでみた
数日使ってみて, PSPが暫定据え置き機器となっている我が部屋ではPCをつけずに音楽を聴ける機器として実用的なのではないかとの考えに至る
音質に極限まで拘るマニア様方は放って置くとして, PCと違ってファン等のノイズがなく再生できる時点で十分に加点要素
昔はmp3をまぁ今でも意味もなく嫌いだけど極端なまでに毛嫌いしてwmaを再生できる携帯プレーヤーを手に入れたりとかしてたし, PSPでも最新『システムソフトウェア』と呼ぶらしいファームウェアではwmaの再生は可能だけど, 音楽ファイルの処理環境がLinuxに移ってしまった今ではWindowsでは可能らしい, タグまでちゃんと指定できるかは調べてないけどコマンドラインでエンコードできないwmaファイルを作るのが面倒になって, ATRACとかも同様の理由で却下するとwavとmp3しか残らないので容量問題を考えると1択になってしまうのである
ちなみにmp3ファイルに規格どおりの日本語のタグをつけるのに多少手間取ったので, 対処法を次の記事にメモしておく
Comments (0):
ここでの前提条件/目標は, LinuxでGUIを介さずにスクリプトさえ組めばバッチ処理的にタグ付けが可能になるようにすること
参考文献
とりあえずFedoraにはid3v2なるコマンドラインのタグエディタがある模様なので, これを使うことに
エスケープとかが面倒なので, perlの明示的に引数を区切っておけば, タイトル中に頻出するスペースとかをエスケープしないでもOKリストのsystem関数で呼ぶことにすると以下のような感じ
system('id3v2', '-a', $artist, '-A', $album, '-t', $title, '-T', sprintf('%d/%d', $tnum, $total), $file);
id3v2コマンドのmanには明記されてないけど, ディスク番号のようなコマンドにないタグも『--TPOS』みたいにid3v2の識別子名を与えれば普通に使える
これで別名Latin-1ISO-8859-1に入る範囲の文字列なら問題なくタグが作れる…が, この中には当然日本語の文字列を入れることはできない
一部の世の中ではここにShift-JISの文字列を何食わぬ顔して放り込むことがまかり通っているようなのだが, こんな日本ローカルルールなファイルは普通にLatin-1を使う人も使えるような国際化されたプログラムにはこんな方法は通用するわけがなく, アクセント記号の山に埋もれて哀しい思いをするだけである
ここで出力されたファイルをodしてみると, 文字列はID3 v2.3でエンコード識別子は常に0x00, つまりISO-8859-1固定であることがソースコード上もそうなっている上に指定方法は無い(使っているid3libの当該関数の呼び出しが存在しない)模様分かる
ここからファイルを無理やり書き換えて日本語タグが入った正常なファイルを目指すわけだが, その前に
system('id3v2', '-s', $file);
として文字コードの概念の欠片も無いID3v1のタグを取り去ることを推奨
本題に戻るとして, とりあえずv2.3のもう一つの選択肢であるUTF-16 w/ BOMを試すことにする, perlならEncodeモジュールで多少書き加えればいいだけ
そのままだとエンコード指定子がISO-8859-1のままなのでid3v2を呼んだ後でヘッダ部分を拾ってきて s/(TIT2......)./$1\x01/s; とか, .に改行文字が引っかかるようにsフラグ必須バイナリ編集して1に書き換えてみた
こうすると日本語のみのタイトルは正常に表示されるのだが, 英文混じりになるとそこで途切れて表示されてしまうようになる
何故だろうと思いながらバイナリを改めて眺めると, どうやらファイルに書き込まれる過程で既に消失している模様, よくよく考えるとUTF-16上のASCII文字って片方のバイトが0x00なのでid3v2コマンドのargvの時点で途切れてしまっていることに気づく, これだからUTF-16は駄目なんだと(以下略)
仕方が無いので, ID3 v2.4.0で追加されたUTF-8エンコードを使うことに, 最初からこうすればよかった
手順は先ほどと変わらず, むしろロケールがUTF-8なのでEncodeモジュールは要らない
コマンドを通した後のバイナリ編集ではseek FILE, 3, 0; したところ4バイト目を\x04と書くべきか0x04に書き換えるのを追加すればOK
これでPSPでもちゃんと日本語タイトルが表示できるmp3ファイルが出来ましたとさ
PSPがoggに対応してくれればこんな面倒なことをせんでも済むのだけど, 今のところ期待できそうに無いのよね
Comments (0):