リソース交換ファイル形式サービス

マルチメディア ファイルの推奨形式は、リソース交換ファイル形式 (RIFF) です。 RIFF ファイル I/O 関数は、バッファーされた基本的なファイル I/O サービスとバッファーなしのファイル I/O サービスで動作します。 他のファイルの種類と同じ方法で、RIFF ファイルを開き、読み取り、書き込むことができます。 RIFF の詳細については、「 AVIFile 関数とマクロ」を参照してください。

RIFF ファイルでは、4 文字のコードを使用してファイル要素を識別します。 これらのコードは、1 から 4 文字の ASCII 英数字のシーケンスを表す 32 ビットの数量で、右側にスペース文字が埋め込まれています。 4 文字コードのデータ型は FOURCC ですmmioFOURCC マクロを使用して、4 文字を 4 文字のコードに変換します。 null で終わる文字列を 4 文字のコードに変換するには、 mmioStringToFOURCC 関数を使用します。

RIFF ファイルの基本的な構成要素は チャンクです。 チャンクは、ビデオ クリップ内の 1 つのフレームなど、マルチメディア データの論理単位です。 各チャンクには、次のフィールドが含まれています。

  • チャンク識別子を指定する 4 文字のコード
  • チャンク内のデータ メンバーのサイズを指定するダブルワード値
  • データ フィールド

次の図は、2 つのサブチャンクを含む "RIFF" チャンクを示しています。

riff chunk that contains two subchunks image

別のチャンクに含まれるチャンクは サブチャンクです。 サブチャンクを含めるために許可されるチャンクは、"RIFF" または "LIST" のチャンク識別子を持つチャンクのみです。 別のチャンクを含むチャンクは親 チャンクと呼ばれます。 RIFF ファイルの最初のチャンクは、"RIFF" チャンクである必要があります。 ファイル内の他のすべてのチャンクは、"RIFF" チャンクのサブチャンクです。

"RIFF" チャンクには、データ フィールドの最初の 4 バイトに追加のフィールドが含まれます。 この追加フィールドは、フィールドの フォームの種類 を提供します。 フォームの種類は、ファイルに格納されているデータの形式を識別する 4 文字のコードです。 たとえば、Microsoft の波形オーディオ ファイルの形式の種類は "WAVE" です。

"LIST" チャンクには、データ フィールドの最初の 4 バイトに追加のフィールドも含まれます。 この追加フィールドには、フィールドの リストの種類 が含まれています。 リストの種類は、リストの内容を識別する 4 文字のコードです。 たとえば、リストの種類が "INFO" の "LIST" チャンクには、著作権と作成日の情報を提供する "ICOP" チャンクと "ICRD" チャンクを含めることができます。 次の図は、"LIST" チャンクと 1 つの他のサブチャンクを含む "RIFF" チャンクを示しています ("LIST" チャンクには 2 つのサブチャンクが含まれています)。

riff chunk that contains a list chunk image

マルチメディア ファイル I/O サービスには、RIFF ファイル内のチャンク間を移動するために使用できる 2 つの関数 (mmioAscendmmioDescend) が含まれています。 これらの関数は、高レベルのシーク関数として使用できます。 チャンクに降りると、ファイルの位置はチャンクのデータ フィールド (チャンクの先頭から 8 バイト) に設定されます。 "RIFF" チャンクと "LIST" チャンクの場合、ファイルの位置はフォームの種類またはリストの種類 (チャンクの先頭から 12 バイト) に続く場所に設定されます。 チャンクから上がると、ファイルの位置はチャンクの末尾に続く場所に設定されます。

新しいチャンクを作成するには、 mmioCreateChunk 関数を使用して、開いているファイルの現在の位置にチャンク ヘッダーを書き込みます。 mmioAscendmmioDescend、および mmioCreateChunk 関数は、MMCKINFO 構造体を使用して、"RIFF" チャンクに関する情報を指定および取得します。