RIFF (WAV) ファイルフォーマットについて

先日,ハイレゾサウンドトラックなるものを買ったところ,DVD-ROMにWAVファイルが記録されていて,それをパソコンで適当に再生する,という代物だったのですが,再生するソフトによって曲名などの情報が見えたり見えなかったり,文字化けしたり別のものが見えたりという不思議な現象が起こり,WAVファイルにどういうふうに曲情報が記録されているのかが気になったので調べてみました.

WAVファイルとはなにか

音声や映像などのデータとタグ情報をひとまとめにするためのファイル形式(コンテナ)に "RIFF" (Resource Interchange File Format) というものがあり,RIFFファイルのうち,音声を格納しており,拡張子が".wav"となっているものが,WAVファイルと呼ばれています.

RIFFファイルはいくつかのチャンクから構成されます.各チャンクの先頭には,チャンクの種類を表すASCIIコード4文字の識別子 (FOURCC) があり,代表的なものとしては,音声の形式情報を格納する "fmt " チャンク,音声のデータ本体を格納する "data" チャンクなどがあります.また,RIFFファイル全体もまた,これらのチャンクを入れ子として内包するひとつのチャンクであり,"RIFF" というFOURCCを持っています.

RIFFチャンクの始めには,メディアの種類を表すフォームタイプというものが記載されており,音声ファイルではこれが"WAVE"となります.

参考: Resource Interchange File Format Services (Windows)

WAVファイルの最小構成

最小構成のRIFFファイルは,ファイル全体そのものである"RIFF"チャンクと,それに内包される"fmt "チャンク,"data"チャンクから成ります.このあたりはあちこちのサイトで説明されています.

参考: WAV ‐ 通信用語の基礎知識

楽曲情報の格納

RIFFファイルは,上に挙げた必須チャンクの他に,いくつものチャンクを内包することができます.ここに,楽曲情報などが格納されるのですが,このときのデータ形式や文字コードが再生ソフトによってばらばらで,そのせいで,あるソフトでは曲情報が表示できるのに他のソフトでは文字化けする,表示されない,別の情報が表示される,等といった現象が起きます.

ここでは,一般的に使われている"LIST"チャンクを使った曲情報の格納と,独自チャンクを使ったID3タグの埋め込みについて説明します.

"LIST"チャンク

"LIST"チャンクは"RIFF"チャンクと同様に,中にいくつもの別のチャンクを内包することができます.このチャンクの先頭には,チャンクがどんな情報を内包しているかを示す4文字のリストタイプが記載されており,楽曲情報の場合はこの値が"INFO"となっています.

このチャンクに内包されるサブチャンクとしては,トラック名を表す"INAM"チャンク, アーティスト情報を表す"IART"チャンクなどがありますが,再生ソフトによってどこまで対応しているかはばらばらです.

ID3タグ

"LIST"チャンクに楽曲情報を格納するというのは,RIFFフォーマット標準であり,ほとんどの再生ソフトが対応しています.しかし,再生ソフトの中には,アルバムアートなどの情報を含めるために,MP3で使われるID3タグをそのままWAVファイルに埋め込んでしまうものがあります.このときの埋め込み方や,埋め込むときのチャンク名,埋め込まれるID3タグのバージョンが再生ソフトによってばらばらで,混乱が生じているようです.

私がいつも使っている再生ソフト(foobar2000とMedia Go)では,"id3 "という名前のチャンクの中に,ID3v2.3.0形式のタグを入れていました.ID3v2.3はUnicodeに対応していることもあり,最近の再生ソフトはこれに標準対応していることが多いようです.

参考: id3v2.3.0 - ID3.org

楽曲情報の書き換え

ここまでで,再生ソフトによって楽曲情報の記録方法がいかにカオスであるかが分かりましたが,ここに書き換え時の挙動の違いが加わるとさらにカオスになります.

まず,"LIST"チャンクについてですが,本来はこのチャンクはファイルの先頭のほうに格納するのが正しいようです.ただ,こうすると曲情報を書き換えてチャンクサイズが変わったときに,ファイル全体を後ろにずらしたり前に詰めたりしなければならず,手間がかかります.そのため,現在ほとんどの再生ソフトでは,曲情報はファイルの最後のほうに書き込みます.

次にID3タグについてですが,この形式に対応したソフトでは曲情報を書き込む際に,対応していないソフト向けに標準の"LIST"チャンクもいっしょに書き込むことが多いようです.

そのため,ID3タグ対応ソフトで書き込んだあとに,"LIST"形式にしか対応していないソフトでタグを編集すると,ソフトによって読める楽曲情報がちがう,という現象が発生します.

さらに,"LIST"形式しか対応していないソフトは,実装を簡単にするために,"LIST"チャンクがファイルの一番最後にない場合には,タグ情報書き換え時に,もとの場所のチャンク名を"JUNK"に書き換えて無効にし,ファイルの一番最後に新たにチャンクを追加しなおす,というものがあります.このようなソフトで書き換えを繰り返していくと,ファイル内がゴミチャンクだらけになります.ソフトによっては,このようなファイルのタグ情報を正しく認識できないことがあります.

結局どうしたらいいか

結局,これらの問題を回避する方法としては,タグの編集はひとつのソフトだけで行い,他のソフトではタグの書き換えは行わない,というようにするのがよいようです.ただ,ソフトによって,このタグには対応しているけどこれには対応していない,このソフトはタグの対応状況はいいが書き換え操作が面倒くさい,ということがあるので,なかなかそうもいきません.

私はいつも,WAVファイル以外のタグ編集にはSuper Tag Editorというソフトを使っているのですが,残念ながらこのソフトはWAVファイルの場合,RIFF形式標準のタグしか読み書きできず,ID3タグを埋め込むというような怪しい拡張形式には対応していないようです.

このソフトはとても使いやすいので,ID3タグに対応してくれると嬉しいのですが……,と思い,改造を試みています.また現在,改造の前準備として,再生ソフトによるタグの対応状況を調べるために,WAVファイルのタグ情報を解析するツールを作りました.タグ情報が怪しいWAVファイルがあるときに使ってみてください.

RIFF Inspector - 七色工房

技術系 > その他 | comments (0) | trackbacks (0)

コメント

コメント投稿






トラックバック