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

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

Синтаксис

HRESULT GetDevicePeriod(
  [out] REFERENCE_TIME *phnsDefaultDevicePeriod,
  [out] REFERENCE_TIME *phnsMinimumDevicePeriod
);

Параметры

[out] phnsDefaultDevicePeriod

Указатель на переменную REFERENCE_TIME , в которую метод записывает значение времени, указывающее интервал по умолчанию между периодическими проходами обработчика звука. Время выражается в 100-наносекундных единицах. Сведения о REFERENCE_TIME см. в документации по Windows SDK.

[out] phnsMinimumDevicePeriod

Указатель на переменную REFERENCE_TIME , в которую метод записывает значение времени, указывающее минимальный интервал между периодическими проходами обработки конечным звуковым устройством. Время выражается в 100-наносекундных единицах.

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

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

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

Комментарии

Клиент может вызвать этот метод перед вызовом метода IAudioClient::Initialize .

Параметр phnsDefaultDevicePeriod указывает период планирования по умолчанию для потока в общем режиме. Параметр phnsMinimumDevicePeriod задает минимальный период планирования для потока в монопольном режиме.

По крайней мере один из двух параметров, phnsDefaultDevicePeriod и phnsMinimumDevicePeriod, должен иметь значение, отличное от NULL, иначе метод возвращает немедленно с кодом ошибки E_POINTER. Если оба параметра не равны NULL, метод выводит значения по умолчанию и минимальные точки.

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

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

Клиент может запланировать выполнение периодического потока обработки с тем же интервалом времени, что и обработчик звука. Таким образом, клиент может достичь наименьшей возможной задержки для потока общего режима. Однако в приложении, для которого задержка менее важна, клиент может уменьшить нагрузку на ЦП, запланируя менее частые этапы обработки. В этом случае буфер конечной точки должен быть пропорционально больше, чтобы компенсировать более длительный период между проходами обработки.

Клиент определяет размер буфера во время вызова метода IAudioClient::Initialize . Для потока общего режима, если клиент передает этому методу значение параметра hnsBufferDuration , равное 0, метод предполагает, что точки для клиента и обработчика звука гарантированно равны, и метод выделяет буфер достаточно мал для достижения минимально возможной задержки. (На самом деле любое значение hnsBufferDuration в диапазоне от 0 до суммы периода звукового модуля и задержки устройства будет иметь одинаковый результат.) Аналогичным образом, для потока в монопольном режиме, если клиент устанавливает для hnsBufferDuration значение 0, метод предполагает, что период клиента равен минимальному периоду устройства конечной точки аудио, и метод выделяет буфер, достаточный для достижения минимальной возможной задержки.

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

Требования

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

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

Интерфейс IAudioClient

IAudioClient::Initialize