Resource Interchange File Format
Resource Interchange File Format(RIFF)は汎用コンテナフォーマットである。 概要RIFFは古典的でシンプルな汎用コンテナフォーマットである。識別子・サイズ・データからなる「チャンク」を基本単位とし、チャンクの木構造として様々なデータを収納できる。マルチバイトはリトルエンディアンで表現される(⇒#仕様)。 RIFFは汎用コンテナフォーマットであるため、RIFFから派生して識別子や木構造の制約を課した分野特化コンテナフォーマットが様々提案・実用化されている。WAVはその代表例である(⇒#派生コンテナフォーマット)。 Interchange File Format をベースとして1991年に考案された(⇒#歴史)。 仕様RIFFファイルはチャンクの集合である。特殊なチャンクであるRIFFヘッダーの仕様により、RIFFファイルは「ヘッダー + チャンク列」という構造になる。このチャンク列は基本的に子チャンクを持たないが、LISTチャンクに限って子チャンク列を内包できる。マルチバイトはリトルエンディアンで表現される。 チャンクチャンク(英: Chunk)は RIFF の基本単位である[1]。 チャンクはチャンク FourCC・チャンクサイズ・チャンクペイロードからなり[1]、以下の構造をもつ:
チャンク FourCCチャンク FourCC は ASCII 4文字で表されたチャンクの識別子・種別コードである[2]。 チャンク FourCC は チャンクサイズチャンクサイズ(英: Chunk Size)はチャンクの中身のバイト数である[3]。 チャンクサイズは「チャンクペイロード - パディング = チャンク全長 - 4 (チャンク FourCC) - 4 (チャンクサイズ) - パディング」を指す[3]。すなわち実質データのバイト数がチャンクサイズであり、uint32 で表現される[3]。 チャンクペイロードチャンクペイロード(英: Chunk Payload)はデータとパディングである[4]。 データは任意長のバイトデータである[4]。このデータ長がチャンクサイズに記録される。データ長が奇数の場合、偶数になるようゼロ埋めされる[4]。 RIFFヘッダーRIFFヘッダー(英: RIFF Header)はRIFFコンテナ先頭に配置される特殊なチャンクである。 RIFFヘッダーは以下の制約をもつ:
上記の制約により、RIFFヘッダーのチャンクサイズは「ファイルサイズ - 8( LISTチャンクLISTチャンク(英: LIST Chunk)は子チャンク列を格納する特殊なチャンクである。 LISTチャンクは以下の制約をもつ:
INFOチャンク
INFOチャンクはいくつかの問題を抱えるチャンク仕様である。 マイクロソフトのWindows 3.1の公式文書によると、ファイルの先頭にINFOチャンクを置くべきとしている。これにより、ファイル内容に関するメタデータに素早くアクセスでき、ファイルシステムやマルチメディアアプリケーションがファイルの先頭を参照して、作者情報、サムネイル、プレビュー、ファイル形式情報などを取り出せる。 Windows XPのファイル管理では、RIFF形式のファイルがあると自動的にINFOチャンクを読もうとする。また、ユーザーがファイルサイズや作成日などの属性情報に加えて、RIFFフィールド(作者、コピーライト日付)を指定することもできる。 問題
マイクロソフトは、あらゆるマルチメディアファイルにRIFFを使用するという方針の下、MIDIファイルにもRIFFを使った新たなファイル形式を策定した。これは、既存のStandard MIDI FileをRIFFラッパーで囲んだような形式で、 大きな動画ファイルでは、先頭にあるべきINFOチャンクを拡張・追加するということはファイル全体のずれを生じるため、ディスクI/Oが多数発生する。これを防ぐため、大きなファイルを作成するときにINFOチャンクにダミーデータを使ってパディングしておく必要がある。そうすることでINFOチャンクに新たな情報を追加してもファイル全体にずれが生じない。そのため、プログラマには正しいファイル形式の知識が必要だった。しかし、マイクロソフトのRIFFに関する文書は分散していて把握しきれないことも多く、一部のプログラマはファイルの最後尾にINFOチャンクを追加してもよいと思い込んでしまった。この対処法が広まった結果、非互換が生じ、正しいファイル形式しか認識しないソフトウェアによって最後尾のINFOチャンクが上書きされてしまうなどの問題が出てきた。 このような擬似RIFFファイルは特にMacintoshでよく見られた(Macintoshのプログラマがマイクロソフトの仕様を把握していないことが多かったためと言われている)。一般にMacintosh上のソフトウェアやクロスプラットフォームのソフトウェアの開発者はこの問題に気づいており、間違ったINFOチャンクも扱えるようにしていることが多かった。例えば、2004年ごろのアップルのWindows上でのQuickTimeプレイヤーソフトは間違ったINFOチャンクも扱えていたが、ソニーのWindows専用のソフトはそうではなかった。これは、多数のメディアファイルを一括処理する場合に問題を生じ、例えば一括でファイル形式の変換をする際に(ユーザーが気づく前に)メタデータが失われてしまうといった事態が発生する。 CorelDRAW10 は通常、RIFFファイル構造を使うが、INFOチャンクは最後尾に置かれる。そのため、デフォルトのWindowsのファイルマネージャではビットマップのプレビューが表示できない。これに対処するにはアドオンユーティリティが必要である。 派生コンテナフォーマットRIFFは汎用コンテナフォーマットであるため、RIFFから派生して識別子や木構造の制約を課した分野特化コンテナフォーマットが様々提案・実用化されている。 マイクロソフトの実装は、RIFFメタ形式を基盤とした各種ファイル形式 (AVI, ANI, WAV) で知られている。
歴史
1991年、マイクロソフトとIBMが提案し、マイクロソフトのWindows 3.1のマルチメディアファイルのデフォルトフォーマットとして採用された。エレクトロニック・アーツが1985年に策定したInterchange File Format (IFF、「交換用ファイル形式」の意味) に基づいている。RIFFはIBM PCが使っているx86プロセッサに合わせて多バイト整数をリトルエンディアン形式で格納するのに対して、IFFはAmigaやMacintoshで使われていたため、68kプロセッサのビッグエンディアンを採用していた点が異なる。なお、Appleは1988年にIFFに基づいたビッグエンディアンのAIFFを策定している。 RF64欧州放送連合が開発したRIFF仕様に基づいた多チャンネルファイル形式としてRF64がある。これはBWF互換であり、4ギガバイトを超えるファイルが構成可能である。 脚注
関連項目外部リンク |
Portal di Ensiklopedia Dunia