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


Формат файла обмена ресурсами (RIFF)

В этом обзоре описывается формат файла обмена ресурсами (RIFF), который используется в .wav файлах. RIFF — это типичный формат, из которого будут загружены звуковые данные для XAudio2.

РИФФ

RIFF-файл состоит из нескольких дискретных разделов данных, называемых блоками.

Идентификаторы FOURCC

Тип данных в блоке указывается идентификатором четырехзначного кода (FOURCC). FourCC — это 32-разрядное целое число без знака, созданное путем объединения четырех символов ASCII, используемых для идентификации типов блоков в RIFF-файле. Например, функция FOURCC "abcd" представлена в маленькой системе как 0x64636261. FOURCCs может содержать пробелы, поэтому "abc" является допустимым FOURCC. Звуковые файлы используют коды FOURCC для идентификации блоков аудиоформатов, блоков звуковых данных и других блоков, относящихся к формату звука.

В следующей таблице показаны идентификаторы FOURCC, которые можно ожидать в форматах звука, поддерживаемых XAudio2.

Формат Идентификаторы FOURCC Дополнительные сведения
ИКМ "RIFF", "fmt", "data"  
ADPCM "RIFF", "fmt", "data", "smpl", "wsmpl" Описание идентификаторов ADPCM, относящихся к 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 плюс размер следующих данных, но не включает размер FOURCC или размер fileSize. Данные состоят из блоков в любом порядке.

  • Другие блоки имеют следующую форму:

    chunkID, chunkSize, data
    

    Где chunkID — это FOURCC, определяющий данные, содержащиеся в блоке, chunkSize — это 4-байтовое значение, указывающее размер раздела данных блока, а данные равны нулю или более байтам данных. Данные всегда заполняются до ближайшей границы WORD. chunkSize предоставляет размер допустимых данных в блоке. Он не включает заполнение, размер chunkIDили размер chunkSize.

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

Практическое руководство. Воспроизведение звука с помощью XAudio2

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