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


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

Метод IsFormatSupported указывает, поддерживает ли устройство аудиоконечную точку определенного формата потока.

Синтаксис

HRESULT IsFormatSupported(
  [in]  AUDCLNT_SHAREMODE  ShareMode,
  [in]  const WAVEFORMATEX *pFormat,
  [out] WAVEFORMATEX       **ppClosestMatch
);

Параметры

[in] ShareMode

Режим общего доступа для формата потока. С помощью этого параметра клиент указывает, следует ли использовать указанный формат в монопольном режиме или общем режиме. Клиент должен задать для этого параметра одно из следующих значений перечисления AUDCLNT_SHAREMODE:

AUDCLNT_SHAREMODE_EXCLUSIVE

AUDCLNT_SHAREMODE_SHARED

[in] pFormat

Указатель на указанный формат потока. Этот параметр указывает на дескриптор формата, выделенный вызывающим объектом типа WAVEFORMATEX или WAVEFORMATEXTENSIBLE. Клиент записывает описание формата в эту структуру перед вызовом этого метода. Сведения о WAVEFORMATEX и WAVEFORMATEXTENSIBLE см. в документации по Windows DDK.

[out] ppClosestMatch

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

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

Код возврата Description
S_OK
Выполнено успешно, а устройство аудио конечной точки поддерживает указанный формат потока.
S_FALSE
Успешно выполнено с ближайшим совпадением с указанным форматом.
AUDCLNT_E_UNSUPPORTED_FORMAT
Выполнено успешно, но указанный формат не поддерживается в монопольном режиме.
 

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

Код возврата Description
E_POINTER
Параметр pFormat имеет значение NULL или ppClosestMatch имеет значение NULL, а ShareMode — AUDCLNT_SHAREMODE_SHARED.
E_INVALIDARG
Параметр ShareMode — это значение, отличное от AUDCLNT_SHAREMODE_SHARED или AUDCLNT_SHAREMODE_EXCLUSIVE.
AUDCLNT_E_DEVICE_INVALIDATED
Устройство конечной точки звука было отключено, или звуковое оборудование или связанные аппаратные ресурсы были перенастроены, отключены, удалены или недоступны для использования.
AUDCLNT_E_RESOURCES_INVALIDATED
Ресурсы потока были недействительны. Эта ошибка может возникать по следующим причинам:
— поток приостановлен.
— Поток эксклюзивной или разгрузки отключен.
— Упаковаемое приложение с монопольным режимом или потоком разгрузки.
— Поток "защищенных выходных данных" закрыт.
AUDCLNT_E_SERVICE_NOT_RUNNING
Звуковая служба Windows не запущена.

Замечания

Этот метод позволяет клиенту определить, прежде чем вызывать IAudioClient::Initialize, поддерживает ли звуковой модуль определенный формат потока.

В монопольном режиме IsFormatSupported возвращает S_OK, если устройство аудио конечной точки поддерживает указанный вызывающий формат или возвращает AUDCLNT_E_UNSUPPORTED_FORMAT, если устройство не поддерживает формат. Параметр ppClosestMatch может иметь значение NULL. Если значение не равно NULL, метод записывает значение NULL в *ppClosestMatch.

Для общего режима, если звуковой механизм поддерживает указанный вызывающим форматом, IsFormatSupported задает *ppClosestMatch значение NULL и возвращает S_OK. Если звуковой модуль не поддерживает указанный вызывающий формат, но поддерживает аналогичный формат, метод получает аналогичный формат с помощью параметра ppClosestMatch и возвращает S_FALSE. Если звуковой механизм не поддерживает указанный вызывающий формат или любой аналогичный формат, метод задает значение *ppClosestMatch значение NULL и возвращает AUDCLNT_E_UNSUPPORTED_FORMAT.

В общем режиме звуковой механизм всегда поддерживает формат смешивания, который клиент может получить, вызвав метод IAudioClient::GetMixFormat . Кроме того, звуковой модуль может поддерживать аналогичные форматы, имеющие ту же частоту выборки и количество каналов, что и формат смешивания, но отличаются в представлении значений образца звука. Звуковой механизм представляет образец значений внутри как числа с плавающей запятой, но если указанный вызывающим форматом представляет примеры значений в виде целых чисел, звуковой механизм обычно может преобразоваться между целыми значениями и внутренним представлением с плавающей запятой.

Звуковой модуль может поддерживать еще более широкий диапазон форматов общего режима, если пакет установки для звукового устройства включает локальный объект обработки звука (APO), который может обрабатывать преобразования формата. APO LFX — это программный модуль, который выполняет обработку аудиопотока для конкретного устройства. Построитель звуковых графов в звуковой службе Windows вставляет APO LFX в поток между каждым клиентом и подсистемой звука. Когда клиент вызывает метод IsFormatSupported и метод определяет, что LFX APO устанавливается для использования с устройством, метод направляет запрос в LFX APO, который указывает, поддерживает ли он указанный вызывающим формат.

Например, определенный объект APO LFX может принимать 6-каналный поток окружает звук от клиента и преобразовывать поток в стереоформат, который можно воспроизводить с помощью наушников. Как правило, APO LFX поддерживает только клиентские форматы с примерами, которые соответствуют частоте выборки формата смеси.

Дополнительные сведения об API см. в разделе "Объекты обработки звука Windows". Дополнительные сведения о методе IsFormatSupported см. в разделе "Форматы устройств".

Требования

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

См. также

Интерфейс IAudioClient

IAudioClient::GetMixFormat

IAudioClient::Initialize