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


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

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

Синтаксис

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

Параметры

[out] phnsDefaultDevicePeriod

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

[out] phnsMinimumDevicePeriod

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

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

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

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

Замечания

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

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

По крайней мере один из двух параметров, phnsDefaultDevicePeriod и phnsMinimumDevicePeriod, должен быть ненулевым или метод возвращается немедленно с кодом ошибки 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