SVX日記
2016-12-29(Thu) mp3のタグの文字化けをなんとかする
ここのところ、起き抜けと、寝しなに、ミニコンポで音楽のある生活を送っている。基本的にDLNAサーバに放り込んでから聴いているのだが、いまだ手持ちのCDのすべてを放り込めていない。とはいえ、以前に自作したflacのタグ編集ツールにより、放り込み作業自体はとても快適に進められている。
最近の問題はmp3だ。過去に借りたCDなどをmp3化したものが少しあるのだが、既存のタグを修正したいのに、できないのだ。いや、厳密にはLinuxにはid3v2というタグ編集ツールがあるのだが、それでタグ付けすると日本語が文字化けしてしまうのだ。
・mp3のタグはID3と呼ばれる
・ID3には、v1とv2がある
・ID3v1は固定長で128バイト、ファイル末尾に位置、文字エンコーディングの規定なし
・ID3v2は可変長で、ファイル先頭に位置
・ID3v2には、ID3v2.2、ID3v2.3、ID3v2.4がある
・ID3v2.2は、UTF-16が使用可能
・ID3v2.3は、UTF-16が使用可能、ID3v2.2と互換性がないが、最も普及している
・ID3v2.4は、UTF-8も使用可能、普及していないらしい
ID3v2からは、規格上キチンと日本語に対応しているはずなのだが、なぜか文字化けしてしまう。id3v2というタグ編集ツールの問題を疑い、適当に日本語を付与し、バイナリダンプしてみると、中身はUTF-8で記録されている。パッと見、ヘンではない。
なるほど、ID3v2.4だから、コンポ側が対応していないせいで文字化けしているのか、と思ったら、ID3ヘッダはID3v2.3を示していた。その場合、UTF-16である必要がある。ダメじゃん。つまり、アレだ。元が海外のツールだから、文字エンコーディングに関してロクにテストしておらず、バグっている、というわけなのだな。
どうも、何をやってもダメそうなので、ソースコードを修正してやろうかとも思ったのだが、Cを読むのがダルい。Rubyのライブラリがあるらしいので、自作しようと思ったが、ライブラリの導入が面倒くさそう。うーむ、ID3v2.2の仕様書をちょっと見た限りでは、さほど複雑そうでもないので、ぜんぶ自分で実装してしまうか。
やりたいことは、既存のmp3ファイルの存在するフォルダから、曲目リストを作成することと、修正した曲目リストから、既存のmp3ファイルのタグを付け直すこと。実は、前者は「mget」、後者は「tagmp3」として既に完成しているので、そいつが呼んでいるバグ付きの「id3v2」と、ほぼ同等の動作をしバグのない「mp3id3」というツールを実装すればいい。
というわけで実装完了。実は、手持ちのmp3の多くは、WindowsのiTunesでエンコードしたものがほとんどであり、それらのタグはID3v2.2で記録されていたので、その読み出しにも対応させた。ID長などが変わっていてマジで互換性がない。まぁ、策定から時間が経っているとはいえ、先が見えないアホが規格を作るとアホなことになるという見本だな、これは。
$ ls -l
-rw-r--r-- 1 user user 725343 6月 9 2007 '1-01 サーカスの来た日.mp3'
-rw-r--r-- 1 user user 3788568 6月 9 2007 '1-02 サンフランシスコ.mp3'
-rw-r--r-- 1 user user 4763695 6月 9 2007 '1-03 踊るダメ人間.mp3'
-rw-r--r-- 1 user user 3712079 6月 9 2007 '1-04 日本印度化計画.mp3'
-rw-r--r-- 1 user user 1421263 6月 9 2007 '1-05 じーさんはいい塩梅.mp3'
-rw-r--r-- 1 user user 2800086 6月 9 2007 '1-06 マタンゴ.mp3'
-rw-r--r-- 1 user user 3972468 6月 9 2007 '1-07 詩人オウムの世界.mp3'
-rw-r--r-- 1 user user 3472591 6月 9 2007 '1-08 元祖高木ブー伝説.mp3'
-rw-r--r-- 1 user user 4807150 6月 9 2007 '1-09 生きてあげようかな.mp3'
-rw-r--r-- 1 user user 4565577 6月 9 2007 '1-10 サボテンとバントライン.mp3'
-rw-r--r-- 1 user user 5641380 6月 9 2007 '1-11 これでいいのだ.mp3'
-rw-r--r-- 1 user user 4562279 6月 9 2007 '1-12 僕の宗教へようこそ ~Welcome to my religi.mp3'
-rw-r--r-- 1 user user 4863974 6月 9 2007 '1-13 キノコパワー.mp3'
-rw-r--r-- 1 user user 5333356 6月 9 2007 '1-14 戦え! 何を!_ 人生を!.mp3'
-rw-r--r-- 1 user user 6772376 6月 9 2007 '1-15 月とテブクロ.mp3'
$ mget . > .info
$ viorg .info
$ diff .info.org .info
1c1
< _ALBUM_: 復活究極ベスト "大公式" [Disc 1]
---
> _ALBUM_: 81:復活究極ベスト "大公式" [Disc 1]
4c4
< _GENRE_: (9)
---
> _GENRE_: Rock
$ cat .info | tagmp3
$ mp3id3 -l *.mp3
id3v2 tag info for 1-01 サーカスの来た日.mp3:
TPE1: 筋肉少女帯
TALB: 81:復活究極ベスト 大公式 [Disc 1]
TIT2: 01:サーカスの来た日
TCON: Rock
TYER: 1989
TRCK: 1/15
id3v2 tag info for 1-02 サンフランシスコ.mp3:
TPE1: 筋肉少女帯
TALB: 81:復活究極ベスト 大公式 [Disc 1]
TIT2: 02:サンフランシスコ
TCON: Rock
TYER: 1989
TRCK: 2/15
:
$ rm -f *.org
$ find . -name "*.mp3" | sort | sed "s/^/mpg123 \"/" | sed "s/$/\"/" | sh
Playing MPEG stream 1 of 1: 1-01 サーカスの来た日.mp3 ...
MPEG 1.0 layer III, 128 kbit/s, 44100 Hz joint-stereo
Title: 01:サーカスの来た日 Artist: 筋肉少女帯
Album: 81:復活究極ベスト 大公式 [Disc 1]
Year: 1989 Genre: Rock
:
パッケージを置いておく。
「cget」は、先の「mget」と似ているが、ローカルのmp3ファイルからではなく、CDのトラック情報を元に、外部のCDのデータベース「gracenote」から曲目リストを得るもの。ただし、利用にはgracenoteの開発者登録が必要で、あらかじめcget.confにクライアントIDを設定しておく必要がある。
$ cget > .info
$ cat .info
_#TOC_: 150 12165 42912 97717 108597 154367 178877 215317 245492
_ALBUM_: データイースト・ゲーム・ミュージック
_ARTIST_: Data East
_GENRE_: Soundtrack
カルノフ
チェルノブ -戦う人間発電所-
サイコニクス・オスカー
ダーウィン 4078 (アレンジ・バージョン)
スーパー・リアル・ダーウィン
ヘビー・バレル
ポケット・ギャル
ワンダー・プラネット
$ cdparanoia -B
cdparanoia III release 10.2 (September 11, 2008)
Ripping from sector 0 (track 1 [0:00.00])
to sector 245341 (track 8 [6:42.24])
outputting to track01.cdda.wav
(== PROGRESS == [ | 012014 00 ] == :^D * ==)
:
Done.
$ eject
$ flac -8 *
flac 1.3.1, Copyright (C) 2000-2009 Josh Coalson, 2011-2014 Xiph.Org Foundation
flac comes with ABSOLUTELY NO WARRANTY. This is free software, and you are
welcome to redistribute it under certain conditions. Type `flac' for details.
track01.cdda.wav: wrote 16148406 bytes, ratio=0.571
:
rm -f *.tag; metaflac --list *.flac | grep -i comment | less
$ viorg .info
$ diff .info.org .info
3,5c3,6
< _ALBUM_: データイースト・ゲーム・ミュージック
< _ARTIST_: Data East
< _GENRE_: Soundtrack
---
> _ALBUM_: 01:データイースト・ゲーム・ミュージック
> _ARTIST_: DATA EAST
> _DATE_: 1988
> _GENRE_: Game Music
$ cat .info | tagflac
余談だが、ちょっと前に「ギャラクティックストーム」というタイトーのゲームのサウンドトラックを購入した。作曲はダライアスやニンジャウォリアーズのOGR氏だし、やたらネット上の評価も高いのだが、未プレイのゲームの曲ってのもなぁ、と躊躇していた。んが、Amazonでmp3形式で配信しているのを知り、先日、製作したPC用スピーカで試聴してみると、意表を突く節回しが心地よく、未プレイであることなどどうでもよくなってしまった。
以前のAmazonのmp3配信は、妙な形式でのダウンロードを強要され、mp3を取り出すのにひと手間が必要だったような気がするが、今はシンプルにzipでまとめられたmp3をダウンロードできるし、ブラウザで直接に聴くことまでできて、なにひとつ不満はない。これに上記の「既存のmp3ファイルのタグを付け直せるツール」が加わったことで、最強の環境になったと言えよう。
もうひとついうと「ギャラクティックストーム」の「オリジナルサウンドトラック」の購入は、アレンジ盤である「ギャラクティックストーム~瞳の記憶~」の購入の布石だったりする。なにせ、似たような位置関係にある「メタルブラック」のアレンジ盤である「メタルブラック-The-First-」は、気がつくともう10年以上も聴いているお気に入りだったりするからな……のだが、なぜかAmazonでは配信されていない。
moraでなら配信されているのだが……aac形式なんだよなぁ。いや、別にaacでもいいんだが、それは、次に「aacのタグの付け直しツール」も作らねばならんということを意味するわけで……とほほ。