Поделиться через


Формат 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.

Начало работы

Руководство: воспроизведение звука при помощи XAudio2

Справочник по программированию в XAudio2