Формат файла обмена ресурсами (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