Метод IAudioClient::GetMixFormat (audioclient.h)

Метод GetMixFormat извлекает формат потока, используемый обработчиком звука для внутренней обработки потоков общего режима.

Синтаксис

HRESULT GetMixFormat(
  [out] WAVEFORMATEX **ppDeviceFormat
);

Параметры

[out] ppDeviceFormat

Указатель на переменную указателя, в которую метод записывает адрес формата mix. Этот параметр должен быть допустимым указателем на переменную указателя, отличного от NULL . Метод записывает адрес структуры WAVEFORMATEX (или WAVEFORMATEXTENSIBLE) в эту переменную. Метод выделяет хранилище для структуры. Вызывающий объект отвечает за освобождение хранилища, когда оно больше не требуется, путем вызова функции CoTaskMemFree . Если вызов GetMixFormat завершается сбоем, *ppDeviceFormat имеет значение NULL. Сведения о WAVEFORMATEX, WAVEFORMATEXTENSIBLE и CoTaskMemFree см. в документации по Windows SDK.

Возвращаемое значение

Если метод завершается успешно, возвращает значение S_OK. В случае сбоя возможные коды возврата включают, но не ограничиваются ими, значения, показанные в следующей таблице.

Код возврата Описание
AUDCLNT_E_DEVICE_INVALIDATED
Устройство конечной точки звука было отключено, или звуковое оборудование или связанные аппаратные ресурсы были перенастроены, отключены, удалены или иным образом стали недоступными для использования.
AUDCLNT_E_SERVICE_NOT_RUNNING
Аудиослужба Windows не запущена.
E_POINTER
Параметр ppDeviceFormat имеет значение NULL.
E_OUTOFMEMORY
Недостаточно памяти.

Комментарии

Клиент может вызвать этот метод перед вызовом метода IAudioClient::Initialize . При создании потока в общем режиме для устройства конечной точки аудио метод Initialize всегда принимает формат потока, полученный из вызова GetMixFormat на том же устройстве.

Формат mix — это формат, который звуковой модуль использует для внутренней цифровой обработки потоков общего режима. Этот формат не обязательно поддерживается устройством конечной точки звука. Таким образом, вызывающему объекту может не удается создать поток в монопольном режиме с форматом, полученным путем вызова GetMixFormat.

Например, чтобы упростить цифровую обработку звука, звуковой модуль может использовать формат mix, представляющий примеры в виде значений с плавающей запятой. Если устройство поддерживает только целые примеры PCM, подсистема преобразует примеры в целочисленные значения PCM или из нее по соединению между устройством и подсистемой. Однако, чтобы избежать повторной выборки, подсистема может использовать смешанный формат с частотой выборки, которую поддерживает устройство.

Чтобы определить, может ли метод Initialize создать поток в общем или монопольном режиме с определенным форматом, вызовите метод IAudioClient::IsFormatSupported .

Сама по себе структура WAVEFORMATEX не может указывать сопоставление каналов с позициями говорящего. Кроме того, хотя WAVEFORMATEX указывает размер контейнера для каждого примера звука, он не может указать количество битов точности в образце (например, 20 бит точности в 24-разрядном контейнере). Однако структура WAVEFORMATEXTENSIBLE может указывать как сопоставление каналов с динамиками, так и количество битов точности в каждой выборке. По этой причине метод GetMixFormat извлекает дескриптор формата в виде структуры WAVEFORMATEXTENSIBLE вместо автономной структуры WAVEFORMATEX . С помощью параметра ppDeviceFormat метод выводит указатель на структуру WAVEFORMATEX , внедренную в начале этой структуры WAVEFORMATEXTENSIBLE . Дополнительные сведения о WAVEFORMATEX и WAVEFORMATEXTENSIBLE см. в документации по Windows DDK.

Дополнительные сведения о методе GetMixFormat см. в разделе Форматы устройств. Примеры кода, вызывающие GetMixFormat, см. в следующих разделах:

Требования

Требование Значение
Минимальная версия клиента Windows Vista [классические приложения | Приложения UWP]
Минимальная версия сервера Windows Server 2008 [классические приложения | Приложения UWP]
Целевая платформа Windows
Header audioclient.h

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

Интерфейс IAudioClient

IAudioClient::Initialize

IAudioClient::IsFormatSupported