Структура WAVEFORMATEX (mmreg.h)

Структура WAVEFORMATEX определяет формат данных волнового звукового потока.

Синтаксис

typedef struct tWAVEFORMATEX {
  WORD  wFormatTag;
  WORD  nChannels;
  DWORD nSamplesPerSec;
  DWORD nAvgBytesPerSec;
  WORD  nBlockAlign;
  WORD  wBitsPerSample;
  WORD  cbSize;
} WAVEFORMATEX, *PWAVEFORMATEX, *NPWAVEFORMATEX, *LPWAVEFORMATEX;

Члены

wFormatTag

Указывает тип звукового формата волновой формы. Дополнительные сведения см. в разделе "Примечания".

nChannels

Указывает количество каналов звуковых данных. Для монофонического звука задайте для этого элемента значение 1. Для стерео присвойте этому элементу значение 2.

nSamplesPerSec

Указывает частоту воспроизведения или записи каждого канала. Если wFormatTag = WAVE_FORMAT_PCM, то общими значениями для nSamplesPerSec являются 8,0 кГц, 11,025 кГц, 22,05 кГц и 44,1 кГц. Например, чтобы указать частоту выборки 11,025 кГц, присвойте nSamplesPerSec значение 11025. Для форматов, отличных от PCM, этот элемент должен вычисляться в соответствии со спецификацией производителя тега формата.

nAvgBytesPerSec

Указывает необходимую среднюю скорость передачи данных в байтах в секунду. Это значение полезно для оценки размера буфера.

nBlockAlign

Задает выравнивание блоков в байтах. Выравнивание блоков — это размер минимальной атомарной единицы данных для типа формата wFormatTag . Если wFormatTag = WAVE_FORMAT_PCM или wFormatTag = WAVE_FORMAT_IEEE_FLOAT, задайте для nBlockAlign(nChannels*wBitsPerSample)/8значение , которое составляет размер одного звукового кадра. Для форматов, отличных от PCM, этот элемент должен вычисляться в соответствии со спецификацией изготовителя для тега формата.

Программное обеспечение для воспроизведения и записи должно обрабатывать несколько байтов данных nBlockAlign за раз. Данные, записываемые на устройство и считывающие их с устройства, всегда должны начинаться в начале блока.

wBitsPerSample

Указывает число битов в выборке для типа формата, заданного wFormatTag. Если wFormatTag = WAVE_FORMAT_PCM, то wBitsPerSample должно иметь значение 8 или 16. Если wFormatTag = WAVE_FORMAT_IEEE_FLOAT, параметру wBitsPerSample должно быть присвоено значение 32. Для форматов, отличных от PCM, задайте значение этого элемента в соответствии со спецификацией производителя для тега формата. Некоторые схемы сжатия не могут определить значение для wBitsPerSample. В этом случае задайте wBitsPerSample равным нулю.

cbSize

Указывает размер (в байтах) дополнительных сведений о формате, добавляемых в конец структуры WAVEFORMATEX. Эти сведения можно использовать в форматах, отличных от PCM, для хранения дополнительных атрибутов wFormatTag. Если wFormatTag не требует дополнительных сведений, задайте для этого элемента значение 0. Для WAVE_FORMAT_PCM форматов клиенты должны игнорировать этот элемент (его значение неявно равно нулю). Так как все клиенты могут не следовать этому правилу, рекомендуется инициализировать cbSize до нуля для WAVE_FORMAT_PCM форматов.

Комментарии

Структура WAVEFORMATEX может описывать только подмножество форматов, которые могут быть описаны структурой WAVEFORMATEXTENSIBLE . Например, WAVEFORMATEX может описывать моно- или (двухканальные) потоки стереоимпульсного кода (PCM) с 8-разрядными или 16-разрядными целыми значениями выборки или с 32-разрядными значениями выборки с плавающей запятой. Кроме того, WAVEFORMATEX может описывать популярные форматы, не относящиеся к PCM, такие как AC-3 и WMA Pro.

WAVEFORMATEX может однозначно описать моно- или стереоформаты PCM, для которых допустимое количество битов на выборку совпадает с размером контейнера выборки. Для описания формата PCM с более чем двумя каналами требуется WAVEFORMATEXTENSIBLE, которая имеет маску канала для указания конфигурации динамиков (то есть сопоставления каналов с физическими положениями динамиков). Чтобы описать формат PCM, для которого количество допустимых битов на выборку меньше размера контейнера выборки (например, 20-битовая выборка, хранящейся в трехбайтовом контейнере), требуется WAVEFORMATEXTENSIBLE, которая указывает как количество допустимых бит выборки, так и размер контейнера выборки.

WAVEFORMATEX может описывать форматы, не относящиеся к PCM, для которых 16-разрядные теги формата определены в файле заголовка Mmreg.h (например, WAVE_FORMAT_MPEG). Элемент wFormatTag объекта WAVEFORMATEX содержит тег форматирования. Укажите формат, отличный от PCM, для которого тег формата не определен в Mmreg.h структурой WAVEFORMATEXTENSIBLE, которая содержит GUID, идентифицирующий формат. При необходимости поставщик оборудования может независимо создать значение GUID для идентификации нового формата. Регистрация GUID в Корпорации Майкрософт не требуется.

Дополнительные сведения о различиях между WAVEFORMATEX и WAVEFORMATEXTENSIBLE см. в разделе Расширяемые дескрипторы Wave-Format.

Член wFormatTag имеет один из тегов формата волн, определенных в Mmreg.h. Теги для некоторых из наиболее распространенных несвображаемых форматов перечислены в следующей таблице.

Значение wFormatTag Значение
WAVE_FORMAT_PCM Данные PCM (импульсно-модулированный код) в целочисленном формате.
WAVE_FORMAT_IEEE_FLOAT Данные PCM в формате IEEE с плавающей запятой.
WAVE_FORMAT_DRM Формат в кодировке DRM (для цифрового аудиосодержимого, защищенного с помощью Microsoft Digital Rights Management).
WAVE_FORMAT_EXTENSIBLE Расширяемая структура WAVEFORMATEX (см . раздел WAVEFORMATEXTENSIBLE).
WAVE_FORMAT_ALAW Формат с кодировкой закона.
WAVE_FORMAT_MULAW Формат с кодировкой mu-law.
WAVE_FORMAT_ADPCM Данные ADPCM (адаптивный дифференциальный импульсный код с модуляцией).
WAVE_FORMAT_MPEG Формат данных MPEG-1 (поток соответствует спецификации iso 11172-3 Audio).
WAVE_FORMAT_DOLBY_AC3_SPDIF AC-3 (он же Dolby Digital) по S/PDIF.
WAVE_FORMAT_WMASPDIF Windows Media Audio (WMA) Pro через S/PDIF.
 

Полный список форматов WAVE_FORMAT_Xxx см. в статье Mmreg.h.

ФУНКЦИЯ WAVEFORMATEX почти идентична структуре PCMWAVEFORMAT, которая является устаревшей структурой, используемой для указания форматов PCM. Единственное отличие заключается в том, что WAVEFORMATEX содержит элемент cbSize , а PCMWAVEFORMAT — нет. По соглашению cbSize следует игнорировать, если wFormatTag = WAVE_FORMAT_PCM (так как cbSize неявно равен нулю). Это соглашение позволяет программному обеспечению драйвера обрабатывать структуры WAVEFORMATEX и PCMWAVEFORMAT одинаково в случае формата PCM. Дополнительные сведения о PCMWAVEFORMAT см. в документации по Microsoft Windows SDK.

Если wFormatTag = WAVE_FORMAT_PCM или wFormatTag = WAVE_FORMAT_IEEE_FLOAT, задайте для cbSize значение 0. Для всех остальных значений wFormatTagcbSize указывает, сколько байтов данных дополнительного формата добавляется в структуру WAVEFORMATEX.

Если wFormatTag = WAVE_FORMAT_EXTENSIBLE, задайте для параметра cbSizesizeof(WAVEFORMATEXTENSIBLE)-sizeof(WAVEFORMATEX) значение плюс размер любых данных, относящихся к формату, которые добавляются в структуру WAVEFORMATEXTENSIBLE.

Требования

   
Верхняя часть mmreg.h (включая Mmsystem.h, Mmreg.h, Mmsystem.h)

См. также раздел

WAVEFORMATEXTENSIBLE