読者です 読者をやめる 読者になる 読者になる

ハクチョウノミズウミ

日記やプログラミングの備忘録などを書きます。雑多なごった煮。

ID3 v2.3 / v2.4 のスプリッタを探る

foobar2000 MP3 日記

もっと勉強しないと

albno273.hatenablog.com

albno273.hatenablog.com

以上のエントリに引き続いて ID3 関連の話第3弾です。

補足エントリを書いた後も Twitter 等のコメントをしばらくサーチしていたんですが、その中に「ID3 のスプリッタは v.2.3 はスラッシュ、v.2.4 はヌル文字」というのがあり、えっ……と思いつつも ID3 v.2.3 の仕様書 (id3v2.3.0 - ID3.org) を確認すると、

TOPE

The 'Original artist(s)/performer(s)' frame is intended for the performer(s) of the original recording, if for example the music in the file should be a cover of a previously released song. The performers are seperated with the "/" character.

スラッシュじゃん……。

どうやら v.2.3 以前はセミコロンで、v.2.3 から変更になったようです。

いや、でも。確かに ID3 v.2.3 以降のスプリッタはセミコロンではないけど、少なくとも自分の環境ではセミコロンで問題なく動いているのはどういうことなんだ?

というわけで、少々調べてみることにしました。

実験環境・手法

実験環境

手法

  1. サンプルとなる MP3 を用意し、MP3Tag / foobar2000 にてタグを編集する。v.2.3 、v.2.4 それぞれに対し、区切り文字をセミコロン、スラッシュ、ヌル文字にしたもの、計6種類を用意。サンプル MP3 は前エントリでも挙げた「メッセージ」(アーティスト: 島村卯月(大橋彩香); 渋谷凛(福原綾香); 本田未央(原紗友里))。なお、v.2.4 は UTF-16、v.2.3 は UTF-8 を用いる。
  2. エクスプローラ / fb2k / MP3Tag / WMP のそれぞれで表示を確認する。

実験結果

区切り文字がセミコロンとスラッシュのものに関しては MP3Tag で作成できたのですが、ヌル文字をどうやっても入力できず、foobar2000 を用いて v.2.4 版の方のみ作成しました。なので実験対象は5種類に。

エクスプローラ

f:id:ALBNo273:20160604012939p:plain

v.2.3 セミコロン v.2.4 セミコロン v.2.3 スラッシュ v.2.4 スラッシュ v.2.4 null
問題なし(セミコロンに置き換え) 途中で切れる 問題なし(セミコロンに置き換え) 途中で切れる 途中で切れる(最初の null で終わる)

Windowsエクスプローラは v.2.4 に対応していないようです。v.2.4 null が最初の null で切れるのも納得できる挙動ですね。 v.2.3 の方は、どちらもセミコロンに置き換えられました。

foobar2000

f:id:ALBNo273:20160604014617p:plain

v.2.3 セミコロン v.2.4 セミコロン v.2.3 スラッシュ v.2.4 スラッシュ v.2.4 null  
問題なし(カンマに置き換え) 問題なし(スラッシュに置き換え) そのまま表示 そのまま表示 問題なし(カンマに置き換え)

v.2.3 スラッシュがそのまま表示されてしまうのは疑問ですが、それ以外は予想通りになりました。 仕様通りの区切り文字はカンマに、v.2.4 セミコロンがスラッシュに置き換えられたのは興味深い挙動です。

MP3Tag

f:id:ALBNo273:20160604015417p:plain

v.2.3 セミコロン v.2.4 セミコロン v.2.3 スラッシュ v.2.4 スラッシュ v.2.4 null
問題なし(スラッシュに置き換え) 問題なし(スラッシュに置き換え) そのまま表示 そのまま表示 そのまま表示

MP3Tag ではセミコロンは問題なく表示されましたが、スラッシュについてはそのままでした。v.2.4 null は表示が\になってしまってますね。

Windows Media Player

f:id:ALBNo273:20160604020022p:plain f:id:ALBNo273:20160604020026p:plain

アルバムタグがおかしくなってるのは v.2.4 に後方互換性がないからです(タグがあれこれ変わってる)。

v.2.3 セミコロン v.2.4 セミコロン v.2.3 スラッシュ v.2.4 スラッシュ v.2.4 null
問題なし(セミコロンに置き換え) 途中で切れる 問題なし(セミコロンに置き換え) 途中で切れる 途中で切れる(最初の null で終わる)

エクスプローラと同じ挙動。

まとめ

表示ソフト v.2.3 セミコロン v.2.4 セミコロン v.2.3 スラッシュ v.2.4 スラッシュ v.2.4 null
エクスプローラ 問題なし(セミコロンに置き換え) 途中で切れる 問題なし(セミコロンに置き換え) 途中で切れる 途中で切れる(最初の null で終わる)
foobar2000 問題なし(カンマに置き換え) 問題なし(スラッシュに置き換え) そのまま表示 そのまま表示 問題なし(カンマに置き換え)
MP3Tag 問題なし(スラッシュに置き換え) 問題なし(スラッシュに置き換え) そのまま表示 そのまま表示 そのまま表示
WMP 問題なし(セミコロンに置き換え) 途中で切れる 問題なし(セミコロンに置き換え) 途中で切れる 途中で切れる(最初の null で終わる)
  • Windows ネイティブなアプリケーションは ID3 v.2.4 を正しく扱えない
  • v.2.3 の仕様書通りにスラッシュを使った場合、Windows ネイティブでは問題ないが、fb2k / MP3Tag では複数アーティストとして扱ってくれない(何故……)

というのを踏まえると、(少なくとも Windows で扱うのであれば) v.2.3 かつセミコロンを用いた表記が最も良いと思われます。 全幅の信頼を置いている foobar2000 が v.2.3 のスラッシュを区切り文字として認識してくれないのはどうにも納得出来ないので、実験方法が間違ってないか検証が必要かもしれません。

まだまだこのあたりは知らないことだらけですね……。精進します。