Resource Interchange File Format
MIMEタイプ | application/x-riff |
---|---|
マジック ナンバー | RIFF |
開発者 | マイクロソフト、IBM |
初版 | 1991年8月 |
種別 | 汎用メタファイル形式 |
派生元 | 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プロセッサのビッグエンディアンを採用していた点が異なる。なお、Appleは1988年にIFFに基づいたビッグエンディアンのAIFFを策定している。
マイクロソフトの実装は、RIFFメタ形式を基盤とした各種ファイル形式 (AVI, ANI, WAV) で知られている。
概要
[編集]RIFFファイルは「チャンク」と呼ばれるものの並びである。形式は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を使った新たなファイル形式を策定した。これは、既存のStandard MIDI FileをRIFFラッパーで囲んだような形式で、.rmi
(英: resource musical instrument に由来)という拡張子であった。このため、Windows上でMIDIファイルを新たな形式に変換してやる必要が生じた。
大きな動画ファイルでは、先頭にあるべきINFOチャンクを拡張・追加するということはファイル全体のずれを生じるため、ディスクI/Oが多数発生する。これを防ぐため、大きなファイルを作成するときにINFOチャンクにダミーデータを使ってパディングしておく必要がある。そうすることでINFOチャンクに新たな情報を追加してもファイル全体にずれが生じない。そのため、プログラマには正しいファイル形式の知識が必要だった。しかし、マイクロソフトのRIFFに関する文書は分散していて把握しきれないことも多く、一部のプログラマはファイルの最後尾にINFOチャンクを追加してもよいと思い込んでしまった。この対処法が広まった結果、非互換が生じ、正しいファイル形式しか認識しないソフトウェアによって最後尾のINFOチャンクが上書きされてしまうなどの問題が出てきた。
このような擬似RIFFファイルは特にMacintoshでよく見られた(Macintoshのプログラマがマイクロソフトの仕様を把握していないことが多かったためと言われている)。一般にMacintosh上のソフトウェアやクロスプラットフォームのソフトウェアの開発者はこの問題に気づいており、間違ったINFOチャンクも扱えるようにしていることが多かった。例えば、2004年ごろのアップルのWindows上でのQuickTimeプレイヤーソフトは間違ったINFOチャンクも扱えていたが、ソニーのWindows専用のソフトはそうではなかった。これは、多数のメディアファイルを一括処理する場合に問題を生じ、例えば一括でファイル形式の変換をする際に(ユーザーが気づく前に)メタデータが失われてしまうといった事態が発生する。
CorelDRAW10 は通常、RIFFファイル構造を使うが、INFOチャンクは最後尾に置かれる。そのため、デフォルトのWindowsのファイルマネージャではビットマップのプレビューが表示できない。これに対処するにはアドオンユーティリティが必要である。
RIFF に基づく主なファイル形式
[編集]- WAV (Windowsオーディオ)
- AVI (Windows動画)
- RMI (Windows RIFF MIDIファイル)
- CDR (CorelDRAWベクターグラフィックスファイル)
- ANI (Windowsのアニメーション付きカーソル)
- WebP (Googleが開発した静止画ファイル形式)