リソース交換ファイルフォーマット(RIFF )は、タグ付きチャンクにデータを格納するための汎用ファイルコンテナフォーマットです。[ 2 ]主にオーディオとビデオに使用されますが、任意のデータにも使用できます。[ 3 ]
Microsoftの実装は、RIFFをベースにしたコンテナフォーマットであるAVI、ANI、WAVを通じて最もよく知られています。 [ 4 ]
RIFFは1991年にマイクロソフトとIBMによって導入され、 Windows 3.1のマルチメディアファイルのデフォルトフォーマットとして使用されました。これは、1985年にエレクトロニック・アーツがAmiga向けに導入したInterchange File Format( IFF)に基づいています。IFFはAmigaのMotorola 68000 CPUのビッグエンディアン方式を採用していますが、RIFFではマルチバイト整数はIBM PC互換機で使用されるx86プロセッサのリトルエンディアン方式で格納されます。ビッグエンディアン方式のRIFXフォーマットも導入されました。
2010年にGoogleはRIFFをコンテナとして使用するWebP画像フォーマットを導入した。 [ 5 ]
RIFFファイルはすべて「チャンク」で構成されています。全体的なフォーマットはIFFと同一ですが、前述のエンディアン方式と、チャンク名の意味が異なります。
すべてのチャンクは以下の形式です。
2つのチャンク識別子「RIFF」と「LIST」は、サブチャンクを含むことができるチャンクを識別します。RIFFおよびLISTチャンクデータ(識別子と長さの後に続く)は、次の形式です。
ファイル自体は1つのRIFFチャンクで構成され、その中にさらにサブチャンクを含めることができます。したがって、正しくフォーマットされたRIFFファイルの最初の4バイトは「RIFF」と表示されます。
RIFFフォーマットに関する詳細は、「ファイル交換フォーマット」の記事をご覧ください。
RF64は、欧州放送連合( EBU)が開発したRIFF仕様に基づくマルチチャンネルファイルフォーマットです。BWFと互換性があり、4ギガバイトを超えるファイルサイズに対応しています。これは、64ビット(8バイト)サイズの「ds64」チャンクを提供することで実現されています。
オプションのINFOチャンクを使用すると、RIFFファイルに、著作権(「ICOP」)、コメント(「ICMT」)、アーティスト(「IART」)など、あらかじめ定義されたカテゴリに分類される情報を標準化された方法で「タグ付け」できます。これらの詳細は、ファイル形式の残りの部分が認識されない場合でも、RIFFファイルから読み取ることができます。この規格では、ユーザー定義フィールドの使用も許可されています。非標準フィールドを使用しようとするプログラマーは、同じ非標準サブチャンクIDが異なるアプリケーションによって異なる(そして互換性のない)方法で使用される可能性があることに留意する必要があります。
マイクロソフトは、Windows 3.1 のすべての「マルチメディア」ファイルに .RIFF を使用するという方針に基づき、電子楽器で再生する楽曲情報を格納するために既存のMIDI ファイルフォーマットの新しいバリアントを導入しました。マイクロソフトの MIDI ファイル フォーマットは、RIFF ラッパーで囲まれた標準 MIDI ファイルで構成され、ファイル拡張子は.RMIでした。既存の MIDI ファイル フォーマットは既に埋め込み型の「タグ付け」情報をサポートしていたため、同じ種類の情報に対して 2 つのファイル フォーマットを扱う必要があるという欠点が生じました。
MIDI製造者協会はその後、RIFFベースのMIDIファイル形式を採用し、それを基盤として「DLS」形式の楽器データも含む「拡張MIDIファイル」を作成し、同じ.RMIファイル内に埋め込んでいます。
カタログ作成の観点から、INFOチャンクの最適な位置はファイルの先頭付近です。しかし、INFOチャンクはオプションであるため、個々のファイル形式の詳細な仕様では省略されることが多く、ファイル内におけるこのチャンクの正しい位置について混乱が生じる場合があります。
大容量のメディアファイルを扱う場合、タグ編集中にINFOチャンクが拡張または縮小されると、新しいヘッダーサイズに対応するために、ファイルの後続の「データ」セクションを読み込んでディスクに書き戻す必要が生じる場合があります。メディアファイルはギガバイト単位のサイズになる可能性があるため、これはディスクに大きな負荷がかかる可能性があります。回避策の1つは、ファイル作成時に先頭のINFOチャンクをダミーデータ(「ダミーチャンク」または「パディングチャンク」)で埋めることです。その後の編集では、「ダミー」フィールドを拡張または縮小してファイルヘッダーの合計サイズを一定に保つことができます。適切に作成されたソフトウェアであれば、タグ付けデータが変更された際に、ファイルの本体を変更したり移動したりすることなく、ファイルヘッダーのみを上書きできます。
一部のプログラムは、INFO チャンクをファイルの本体の後に配置することでこの問題を解決しようと試みてきました。しかし、この結果、チャンクの配置に関して 2 つの異なる慣習が生じ、ソフトウェアの組み合わせによっては、編集中にファイルの INFO データが無視されたり、完全に上書きされたりするリスクが生じています。より高度なプログラムは、ファイル内の「予期しない」チャンク配置の可能性を考慮し、それに応じて対応します。たとえば、オーディオ編集プログラムのAudacityは、末尾に INFO データが配置された .WAV ファイルを検出すると、データを正しく識別して読み取りますが、保存時には INFO チャンクをファイル ヘッダーに戻します。
CorelDRAW 10は名目上はRIFFファイル構造を使用していますが、初期リリースではINFOチャンクがファイルの末尾に配置されていたため、埋め込まれたプレビュービットマップはWindowsのファイルマネージャではデフォルトでは表示されませんでした。この問題を解決するには、プログラムに付属の「パッチ」ユーティリティを使用します。
RIFF情報タグは、WAVオーディオファイルとAVIビデオファイルに含まれています。
このフィールドは、スペース(0x20)で区切られた2つの値(v[0]とv[1])で構成されます。サンプルコード:
// 秒単位の時間 - 小数点区切り文字を使用して日付と時刻の要素を「連結」しますTimeInSeconds = ( v [ 0 ] * ( 2 ^ 32 ) + v [ 1 ]) * 10 ^ ( -7 );// 1601 年 1 月 1 日から Unix エポック 1970 年 1 月 1 日までの基準時間 (369 年と閏日) をシフトしますUnixTimeStamp = TimeInSeconds - 134774 * 24 * 3600 ;