Resource
Interchange File Format(RIFF)は、多様なデータを格納するための汎用
コンテナフォーマットです。
1991年にMicrosoftと
IBMによって提案され、Windows 3.1の
マルチメディアファイルの標準フォーマットとして採用されました。RIFFは、データの塊である「チャンク」を基本単位とし、それらを組み合わせて構造化されたデータを表現します。
RIFFの概要
RIFFは、シンプルでありながら柔軟な構造を持つ
コンテナフォーマットです。データは、識別子、サイズ、ペイロードから構成される「チャンク」と呼ばれる単位で管理されます。これらのチャンクは木構造を形成することができ、これにより複雑なデータ構造を効率的に表現できます。RIFFの重要な特徴として、マルチバイトデータはリトル
エンディアンで格納される点が挙げられます。
RIFFは汎用性が高いため、多くの分野特化
コンテナフォーマットの基盤となっています。代表的なものとして、
WAV(音声ファイル形式)やAVI(動画ファイル形式)などがあります。これらのフォーマットは、RIFFの基本的な構造をベースに、特定の用途に合わせた制約や拡張を加えています。
RIFFの仕様
RIFFファイルは、チャンクの集合体として構成されます。ファイルは必ずRIFFヘッダーと呼ばれる特殊なチャンクで始まり、その後に任意の数のチャンクが続きます。RIFFヘッダーは、ファイルの先頭に配置され、
ファイルフォーマット名とチャンク列を格納します。
チャンクは、以下の3つの要素で構成されます。
1.
チャンク FourCC: チャンクの識別子となる4文字の
ASCIIコード。
2.
チャンクサイズ: チャンクペイロードのバイト数を表す32ビット整数。
3.
チャンクペイロード: チャンクに格納されるデータ。データ長が奇数の場合、偶数になるようにゼロ埋めされます。
特殊なチャンクとして、LISTチャンクがあります。LISTチャンクは、他のチャンクを子チャンクとして格納することができ、階層的なデータ構造を表現するのに役立ちます。
RIFFヘッダー
RIFFヘッダーは、RIFFファイルの先頭に必ず存在する必要のある特殊なチャンクです。以下の制約があります。
ファイル先頭に1つのみ存在
チャンク FourCC は "RIFF" である
チャンクペイロードは、ファイルフォーマット名とチャンク列で構成される。
LISTチャンク
LISTチャンクは、他のチャンクを子チャンクとして格納するための特殊なチャンクです。以下の制約があります。
チャンク FourCC は "LIST" である
チャンクペイロードは、子チャンクタイプと子チャンク列で構成される。
INFOチャンクとその問題点
INFOチャンクは、ファイルに関するメタデータを格納するためのチャンクです。本来はファイルの先頭に配置されるべきとされています。しかし、INFOチャンクの位置に関する誤った認識や実装ミスにより、以下のような問題が発生しました。
INFOチャンクの位置がファイル末尾にある場合がある:これにより、
メタデータへのアクセスが遅くなり、互換性の問題も生じました。
INFOチャンクのサイズ変更によるファイルのずれ:大きなファイルでは、INFOチャンクの拡張や追加がファイル全体のずれを引き起こすため、ディスクI/Oが頻繁に発生しました。
これらの問題は、特にMacintosh環境で多く見られました。一部のソフトウェア開発者は、誤った位置にあるINFOチャンクを処理できるように実装しましたが、全てのソフトウェアがそうだったわけではありません。その結果、メタデータが失われたり、ファイルが正しく処理されないといった問題が生じました。また、CorelDRAW10のように、意図的にINFOチャンクをファイル末尾に置くアプリケーションも存在し、互換性の問題をさらに複雑にしました。
RIFFは汎用コンテナフォーマットであるため、様々な分野特化コンテナフォーマットがRIFFをベースに開発されました。以下にその代表例を挙げます。
WAV:Windowsの標準的な音声ファイル形式
AVI:Windowsの標準的な動画ファイル形式
RMI:RIFFをベースとした
MIDIファイル形式
CDR:CorelDRAWのベクターグラフィックスファイル形式
ANI:Windowsのアニメーションカーソルファイル形式
*
WebP :
Googleが開発した静止画ファイル形式
RIFFの歴史
RIFFは、
1991年にMicrosoftと
IBMによって提案されました。その基礎となったのは、
1985年にElectronic Artsが策定した
Interchange File Format(IFF)です。RIFFは、
IBM PCが採用するx86プロセッサに合わせてリトル
エンディアンを採用しているのに対し、IFFは
AmigaやMacintoshで使われていた68kプロセッサに合わせてビッグ
エンディアンを採用していました。
Appleは
1988年にIFFをベースにしたビッグ
エンディアンの
AIFFを策定しています。
RF64
欧州放送連合(EBU)は、RIFF仕様に基づいた多チャンネルファイル形式としてRF64を開発しました。RF64はBWF互換であり、4GBを超えるファイルに対応しています。
まとめ
RIFFは、シンプルでありながら柔軟な構造を持つ汎用
コンテナフォーマットです。その汎用性の高さから、
WAVやAVIなど多くの派生フォーマットを生み出してきました。しかし、INFOチャンクの扱いの誤りによる互換性の問題や、ファイルサイズの制限など、いくつかの課題も抱えていました。しかし、その歴史と多岐にわたる応用例は、RIFFが現代の
マルチメディアファイルフォーマットに大きな影響を与えたことを示しています。