Формат RIFF (Resource Interchange File Format)
В этом обзоре описывается формат RIFF, который используется в WAV-файлах. RIFF — это типичный формат, из которого будут загружаться звуковые данные для XAudio2.
RIFF
RIFF-файл состоит из нескольких дискретных разделов данных, называемых блоками.
Идентификаторы FOURCC
Тип данных в блоке обозначается идентификатором four-символьного кода (FOURCC). FOURCC — это 32-разрядное целое число без знака, созданное путем объединения четырех символов ASCII, используемых для идентификации типов блоков в RIFF-файле. Например, функция FOURCC "abcd" представлена в системе с небольшим эндианом в виде 0x64636261. FOURCCs может содержать пробелы, поэтому "abc" является допустимым FOURCC. Звуковые файлы используют коды FOURCC для идентификации блоков аудиоформата, блоков звуковых данных и любых других блоков, относящихся к звуковому формату.
В следующей таблице показаны идентификаторы FOURCC, которые можно ожидать в аудиоформатах, поддерживаемых XAudio2.
Формат | Идентификаторы FOURCC | Дополнительные сведения |
---|---|---|
PCM | "RIFF", "fmt" , "data" | |
ADPCM | "RIFF", "fmt", "data", "smpl", "wsmpl" | Описание идентификаторов FOURCC, относящихся к ADPCM, см. в статье Общие сведения об ADPCM . |
Идентификаторы FOURCC "RIFF", "fmt" и "data" являются общими для всех поддерживаемых форматов. В следующей таблице описаны идентификаторы FOURCC, которые находятся во всех поддерживаемых форматах.
Идентификатор FOURCC | Описание |
---|---|
"RIFF" | Стандартный фрагмент RIFF, содержащий тип файла со значением "WAVE" или "XWMA" в первых четырех байтах раздела данных, а другие блоки в файле в оставшейся части раздела данных. |
"fmt" | Содержит заголовок формата для звукового файла. Данные в этом блоке соответствуют одной из следующих структур: WAVEFORMATEX, WAVEFORMATEXTENSIBLE ADPCMWAVEFORMAT. |
"data" | Содержит звуковые данные для звукового файла. В XAudio2 содержимое блока данных считывается в буфер и передается в исходный голос в качестве элемента pAudioDataструктуры XAUDIO2_BUFFER . |
Блоки
RIFF-файл состоит из блока RIFF, содержащего ноль или более других блоков.
Блок RIFF имеет следующую форму:
"RIFF", fileSize, fileType, data
Где "RIFF" — это литеральный код FOURCC "RIFF", fileSize — 4-байтовое значение, определяющее размер данных в файле, а fileType — это FOURCC, идентифицирующее конкретный тип файла. Значение fileSize включает в себя размер fileType FOURCC плюс размер данных, которые следуют за ним, но не включает размер "RIFF" FOURCC или размер fileSize. Данные состоят из блоков в любом порядке.
Другие блоки имеют следующую форму:
chunkID, chunkSize, data
Если chunkID — это FOURCC, идентифицирующий данные, содержащиеся в блоке, chunkSize — 4-байтовое значение, определяющее размер раздела данных блока, а данные — ноль или более байтов данных. Данные всегда заполняются до ближайшей границы WORD. chunkSize задает размер допустимых данных в блоке. Он не включает заполнение, размер chunkID или размер chunkSize.
Связанные темы