Структура 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 |