Resource Interchange File Format
Resource Interchange File Format(RIFF)は、タグ付きのデータを格納するための汎用メタフォーマットである。1991年、マイクロソフトとIBMが提案し、マイクロソフトの Windows 3.1 のマルチメディアファイルのデフォルトのフォーマットとして採用された。エレクトロニック・アーツが1985年に策定した Interchange File Format (IFF) に基づいている。RIFF は IBM PC が使っているx86プロセッサに合わせて多バイト整数をリトルエンディアン形式で格納するのに対して、IFF は Amiga や Macintosh で使われていたため、68kプロセッサのビッグエンディアンを採用していた点が異なる。なお、アップルは1988年に IFF に基づいたビッグエンディアンのAIFFを策定している。
マイクロソフトの実装は、RIFFメタフォーマットを基盤とした各種ファイルフォーマット(AVI、ANI、WAV)で知られている。
概要
RIFFファイルは「チャンク(chunk)」と呼ばれるものの並びである。フォーマットは IFF と全く同一であり、上述の通りエンディアンだけが異なる。また、チャンク名の意味も一部異なる。
全てのチャンクは次のような形式である。
- 4バイト: チャンクのASCII識別子。例えば、"fmt "、"data" など。
- 4バイト: 符号なしでリトルエンディアンの32ビット整数。チャンクの長さを示す(このフィールドと上の識別子を除いた長さ)。
- 可変長フィールド: チャンクデータ本体。長さは上記フィールドで示されたもの。
- パディング: チャンク長が偶数バイトでない場合に1バイト追加される。
チャンク識別子 "RIFF" と "LIST" は、チャンク内にサブチャンクを含むことができる。これらのチャンクは、識別子と長さの後が次のような形式である。
- 4バイト: このチャンクのASCII識別子(フォームタイプと呼ぶ。RIFFチャンクの場合、"AVI" や "WAVE" がある)
- サブチャンクの並び
ファイル全体が1つのRIFFチャンクで構成され、サブチャンクの並びが格納されている。したがって、正しいRIFFファイルの先頭には "R"、"I"、"F"、"F" の4文字が必ず存在する。
欧州放送連合が開発したRIFF仕様に基づいた多チャンネルファイルフォーマットとしてRF64がある。これはBWF互換であり、4ギガバイトを超えるファイルが構成可能である。
INFOチャンク
マイクロソフトの Windows 3.1 の公式文書によると、ファイルの先頭に INFO チャンクを置くべきとしている。これにより、ファイル内容に関するメタデータに素早くアクセスでき、ファイルシステムやマルチメディアアプリケーションがファイルの先頭を参照して、作者情報、サムネイル、プレビュー、フォーマット情報などを取り出せる。
Windows XPのファイル管理では、RIFF形式のファイルがあると自動的にINFOチャンクを読もうとする。また、ユーザーがファイルサイズや作成日などの属性情報に加えて、RIFFフィールド(作者、コピーライト日付)を指定することもできる。
問題
マイクロソフトは、あらゆるマルチメディアファイルにRIFFを使用するという方針の下、MIDIファイルにもRIFFを使った新たなファイルフォーマットを策定した。これは、既存のMIDIファイルフォーマットをRIFFラッパーで囲んだような形式で、.rmi
(Resource Musical Instrument)という拡張子であった。このため、Windows 上でMIDIファイルを新たな形式に変換してやる必要が生じた。
大きな動画ファイルでは、先頭にあるべきINFOチャンクを拡張・追加するということはファイル全体のずれを生じるため、ディスクI/Oが多数発生する。これを防ぐため、大きなファイルを作成するときにINFOチャンクにダミーデータを使ってパディングしておく必要がある。そうすることでINFOチャンクに新たな情報を追加してもファイル全体にずれが生じない。しかし、そのためにはプログラマが正しくフォーマットを把握しておく必要があり、マイクロソフトのRIFFに関する文書は分散していて把握しきれないことが多かった。そのため、一部のプログラマはファイルの最後尾にINFOチャンクを追加してもよいと思い込み、そのような対処法が広まってしまった。それによって非互換が生じ、正しいフォーマットしか認識しないソフトウェアによって最後尾のINFOチャンクが上書きされてしまうなどの問題が出てきた。
このような擬似RIFFファイルは特に Macintosh でよく見られた(Macintosh のプログラマがマイクロソフトの仕様を把握していないことが多かったためと言われている)。一般に Mac 上のソフトウェアやクロスプラットフォームのソフトウェアの開発者はこの問題に気づいており、間違ったINFOチャンクも扱えるようにしていることが多かった。例えば、2004年ごろのアップルのWindows上でのQuickTimeプレイヤーソフトは間違ったINFOチャンクも扱えていたが、ソニーのWindows専用のソフトはそうではなかった。これは、多数のメディアファイルを一括処理する場合に問題を生じ、例えば一括でフォーマットの変換をする際に(ユーザーが気づく前に)メタデータが失われてしまうといった事態が発生する。
CorelDRAW10 は通常、RIFFファイル構造を使うが、INFOチャンクは最後尾に置かれる。そのため、デフォルトのWindowsのファイルマネージャではビットマップのプレビューが表示できない。これに対処するにはアドオンユーティリティが必要である。
関連項目
RIFF に基づく主なファイルフォーマット
- WAV (Windowsオーディオ)
- AVI (Windows動画)
- RMI (Windows "RIFF MIDIファイル")
- CDR (CorelDRAWベクターグラフィックスファイル)
- ANI (Windows のアニメーション付きカーソル)