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


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

[Функция, связанная с этой страницей DirectShow, является устаревшей функцией. Он был заменен MediaPlayer, IMFMediaEngine, и аудио/ видео захвата в Media Foundation. Эти функции оптимизированы для Windows 10 и Windows 11. Корпорация Майкрософт настоятельно рекомендует, чтобы новый код использовал MediaPlayer, IMFMediaEngine и аудио- и видеозахват в Media Foundation вместо DirectShow, когда это возможно. Корпорация Майкрософт предлагает переписать существующий код, использующий устаревшие API, чтобы по возможности использовать новые API.]

Структура WAVEFORMATEXTENSIBLE определяет формат звуковых данных waveform для форматов, имеющих более двух каналов или более высоких разрешений выборки, чем разрешено WAVEFORMATEX. Его также можно использовать для определения любого формата, который может быть определен с помощью WAVEFORMATEX.

Синтаксис

typedef struct {
  WAVEFORMATEX Format;
  union {
    WORD wValidBitsPerSample;
    WORD wSamplesPerBlock;
    WORD wReserved;
  } Samples;
  DWORD        dwChannelMask;
  GUID         SubFormat;
} WAVEFORMATEXTENSIBLE, *PWAVEFORMATEXTENSIBLE;

Члены

Format

Структура WAVEFORMATEX, задающая базовый формат. Элемент wFormatTag должен быть WAVE_FORMAT_EXTENSIBLE. Элемент cbSize должен быть не менее 22.

Samples

Объединение, описывающее формат образца.

Samples.wValidBitsPerSample

Число битов точности в сигнале. Обычно равно WAVEFORMATEX.wBitsPerSample. Однако размер контейнера wBitsPerSample должен быть кратным 8, тогда как wValidBitsPerSample может быть любым значением, не превышающим размер контейнера. Например, если формат использует 20-разрядные примеры, значение wBitsPerSample должно быть не менее 24, а wValidBitsPerSample равно 20.

Samples.wSamplesPerBlock

Количество примеров, содержащихся в одном сжатом блоке звуковых данных. Это значение используется при оценке буфера. Это значение используется со сжатыми форматами, имеющими фиксированное количество выборок в каждом блоке. Это значение может быть равно 0, если в каждом блоке сжатых звуковых данных содержится переменное число выборок. В этом случае сведения об оценке буфера и положении должны быть получены другими способами.

Samples.wReserved

Зарезервировано для внутреннего использования операционной системой. Задайте значение 0.

dwChannelMask

Битовая маска, указывающая назначение каналов в потоке позициям говорящего.

SubFormat

Подчиненная форма данных, например KSDATAFORMAT_SUBTYPE_PCM. Сведения о подчиненном формате похожи на сведения, предоставляемые тегом в элементе wFormatTag структуры WAVEFORMATEX.

Комментарии

WAVEFORMATEXTENSIBLE может описывать любой формат, который может быть описан в WAVEFORMATEX, но обеспечивает дополнительную поддержку более чем для двух каналов, для большей точности в количестве битов на выборку и для новых схем сжатия.

WAVEFORMATEXTENSIBLE можно безопасно привести к WAVEFORMATEX, так как он просто настраивает дополнительные байты, указанные в WAVEFORMATEX.cbSize.

Член dwChannelMask указывает, какие каналы присутствуют в многоканальном потоке. Наименее значимый бит соответствует переднему левому динамику, следующий наименьший бит соответствует переднему правому динамику и т. д. Биты в порядке значимости определяются следующим образом.

Положение говорящего Бит флага
SPEAKER_FRONT_LEFT 0x1
SPEAKER_FRONT_RIGHT 0x2
SPEAKER_FRONT_CENTER 0x4
SPEAKER_LOW_FREQUENCY 0x8
SPEAKER_BACK_LEFT 0x10
SPEAKER_BACK_RIGHT 0x20
SPEAKER_FRONT_LEFT_OF_CENTER 0x40
SPEAKER_FRONT_RIGHT_OF_CENTER 0x80
SPEAKER_BACK_CENTER 0x100
SPEAKER_SIDE_LEFT 0x200
SPEAKER_SIDE_RIGHT 0x400
SPEAKER_TOP_CENTER 0x800
SPEAKER_TOP_FRONT_LEFT 0x1000
SPEAKER_TOP_FRONT_CENTER 0x2000
SPEAKER_TOP_FRONT_RIGHT 0x4000
SPEAKER_TOP_BACK_LEFT 0x8000
SPEAKER_TOP_BACK_CENTER 0x10000
SPEAKER_TOP_BACK_RIGHT 0x20000
 

Каналы, указанные в dwChannelMask , должны присутствовать в заданном порядке (от наименьшего бита до бита). Например, если указаны только SPEAKER_FRONT_LEFT и SPEAKER_FRONT_RIGHT, то выборки для переднего левого динамика должны быть первыми в потоке с чередованием. Число битов, заданное в dwChannelMask , должно совпадать с числом каналов, заданных в WAVEFORMATEX.nChannels.

Для обеспечения обратной совместимости любой волновой формат, который может быть задан автономной структурой WAVEFORMATEX , также можно определить с помощью структуры WAVEFORMATEXTENSIBLE . Таким образом, каждый тег формата волны в mmreg.h имеет соответствующий GUID SubFormat . В следующей таблице приведены некоторые типичные теги волнового формата и соответствующие им идентификаторы GUID SubFormat . Эти идентификаторы GUID определяются в Ksmedia.h.

Тег Wave-Format SubFormat GUID
WAVE_FORMAT_PCM KSDATAFORMAT_SUBTYPE_PCM
WAVE_FORMAT_IEEE_FLOAT KSDATAFORMAT_SUBTYPE_IEEE_FLOAT
WAVE_FORMAT_DRM KSDATAFORMAT_SUBTYPE_DRM
WAVE_FORMAT_ALAW KSDATAFORMAT_SUBTYPE_ALAW
WAVE_FORMAT_MULAW KSDATAFORMAT_SUBTYPE_MULAW
WAVE_FORMAT_ADPCM KSDATAFORMAT_SUBTYPE_ADPCM
 

Так как WAVEFORMATEXTENSIBLE является расширенной версией WAVEFORMATEX, она может описывать дополнительные форматы, которые не могут быть описаны только в WAVEFORMATEX . Поставщики могут самостоятельно определять идентификаторы GUID subFormat , чтобы определить собственные форматы, для которых не существует тегов волновых форматов.

Следующие структуры для определенных расширенных форматов определяются как WAVEFORMATEXTENSIBLE.

Определение Значение subFormat
WAVEFORMATIEEEFLOATEX KSDATAFORMAT_SUBTYPE_IEEE_FLOAT
WAVEFORMATPCMEX KSDATAFORMAT_SUBTYPE_PCM

Требования

   
Минимальная версия клиента Windows XP [только классические приложения]
Минимальная версия сервера Windows Server 2003 [только классические приложения]
Верхняя часть mmreg.h

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

Звуковой сигнал

Структуры волнообразной формы