[このページ マルチメディア ファイル I/Oに関連付けられている機能は、従来の機能です。 これは、ソースリーダーに置き換わりました。 ソース リーダー は、Windows 10 および Windows 11 用に最適化されています。 可能な場合は、マルチメディア ファイル I/O ではなく、新しいコード ソース リーダー使用することを強くお勧めします。 従来の API を使用する既存のコードは、可能であれば新しい API を使用するように書き直すよう提案しています。
マルチメディア ファイルの推奨形式は、リソース交換ファイル形式 (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 文字のコード
- チャンク内のデータ メンバーのサイズを指定する doubleword 値
- データ フィールド
次の図は、2 つのサブチャンクを含む "RIFF" チャンクを示しています。
を含むリフ チャンク
別のチャンクに含まれるチャンクは、サブチャンクです。 サブチャンクを格納できるチャンクは、チャンク識別子が "RIFF" または "LIST" のチャンクのみです。 別のチャンクを含むチャンクは、親チャンクと呼ばれます。 RIFF ファイルの最初のチャンクは、"RIFF" チャンクである必要があります。 ファイル内の他のすべてのチャンクは、"RIFF" チャンクのサブチャンクです。
"RIFF" チャンクには、データ フィールドの最初の 4 バイトに追加のフィールドが含まれます。 この追加フィールドは、フィールドの フォームの種類 を提供します。 フォーム型は、ファイルに格納されているデータの形式を識別する 4 文字のコードです。 たとえば、Microsoft 波形オーディオ ファイルの形式の種類は "WAVE" です。
"LIST" チャンクには、データ フィールドの最初の 4 バイトに追加のフィールドも含まれます。 この追加フィールドには、フィールドの リスト型が含まれています。 リストの種類は、リストの内容を識別する 4 文字のコードです。 たとえば、リストの種類が "INFO" の "LIST" チャンクには、著作権と作成日の情報を提供する "ICOP" チャンクと "ICRD" チャンクを含めることができます。 次の図は、"LIST" チャンクともう 1 つのサブチャンクを含む "RIFF" チャンクを示しています ("LIST" チャンクには 2 つのサブチャンクが含まれています)。
リスト チャンク イメージする
マルチメディア ファイル I/O サービスには、RIFF ファイル内のチャンク間を移動するために使用できる 2 つの関数が含まれています。mmioAscendと mmioDescendします。 これらの関数は、高度なシーク関数として使用できます。 チャンクに降りると、ファイルの位置はチャンクのデータ フィールド (チャンクの先頭から 8 バイト) に設定されます。 "RIFF" チャンクと "LIST" チャンクの場合、ファイルの位置はフォームの種類またはリストの種類 (チャンクの先頭から 12 バイト) の後の場所に設定されます。 チャンクから上昇すると、ファイルの位置はチャンクの末尾の後の場所に設定されます。
新しいチャンクを作成するには、mmioCreateChunk 関数を使用して、開いているファイルの現在の位置にチャンク ヘッダーを書き込みます。 mmioAscend、mmioDescend、および mmioCreateChunk 関数は、MMCKINFO 構造体を使用して、"RIFF" チャンクに関する情報を指定および取得します。