Método IAudioClient::GetDevicePeriod (audioclient.h)

El método GetDevicePeriod recupera la longitud del intervalo periódico que separa los pasos de procesamiento sucesivos por el motor de audio en los datos del búfer del punto de conexión.

Sintaxis

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

Parámetros

[out] phnsDefaultDevicePeriod

Puntero a una variable de REFERENCE_TIME en la que el método escribe un valor de tiempo que especifica el intervalo predeterminado entre los pasos de procesamiento periódicos por parte del motor de audio. El tiempo se expresa en unidades de 100 nanosegundos. Para obtener información sobre REFERENCE_TIME, consulte la documentación de Windows SDK.

[out] phnsMinimumDevicePeriod

Puntero a una variable de REFERENCE_TIME en la que el método escribe un valor de tiempo que especifica el intervalo mínimo entre los pasos de procesamiento periódicos por el dispositivo de punto de conexión de audio. El tiempo se expresa en unidades de 100 nanosegundos.

Valor devuelto

Si el método se realiza correctamente, devuelve S_OK. Si se produce un error, los posibles códigos de retorno incluyen, pero no están limitados a, los valores que se muestran en la tabla siguiente.

Código devuelto Descripción
AUDCLNT_E_DEVICE_INVALIDATED
El dispositivo de punto de conexión de audio se ha desconectado o el hardware de audio o los recursos de hardware asociados se han reconfigurado, deshabilitado, quitado o no están disponibles para su uso.
AUDCLNT_E_SERVICE_NOT_RUNNING
El servicio de audio de Windows no se está ejecutando.
E_POINTER
Los parámetros phnsDefaultDevicePeriod y phnsMinimumDevicePeriod son NULL.

Comentarios

El cliente puede llamar a este método antes de llamar al método IAudioClient::Initialize .

El parámetro phnsDefaultDevicePeriod especifica el período de programación predeterminado para una secuencia en modo compartido. El parámetro phnsMinimumDevicePeriod especifica el período de programación mínimo para una secuencia en modo exclusivo.

Al menos uno de los dos parámetros, phnsDefaultDevicePeriod y phnsMinimumDevicePeriod, debe ser distinto de NULL o el método devuelve inmediatamente con código de error E_POINTER. Si ambos parámetros no son NULL, el método genera los períodos predeterminados y mínimos.

Para una secuencia en modo compartido, el motor de audio procesa periódicamente los datos en el búfer del punto de conexión, que el motor comparte con la aplicación cliente. El motor se programa para realizar estos pasos de procesamiento a intervalos regulares.

El período entre los pasos de procesamiento por parte del motor de audio se fija para un dispositivo de punto de conexión de audio determinado y representa el cuanto de procesamiento más pequeño para el motor de audio. Este período más la latencia de secuencia entre el búfer y el dispositivo de punto de conexión representa la latencia mínima posible que puede lograr una aplicación de audio.

El cliente tiene la opción de programar su subproceso de procesamiento periódico para que se ejecute al mismo tiempo que el motor de audio. De este modo, el cliente puede lograr la menor latencia posible para una secuencia en modo compartido. Sin embargo, en una aplicación para la que la latencia es menos importante, el cliente puede reducir la sobrecarga de conmutación de procesos en la CPU mediante la programación de sus pases de procesamiento para que se produzcan con menos frecuencia. En este caso, el búfer del punto de conexión debe ser proporcionalmente mayor para compensar el período más largo entre los pasos de procesamiento.

El cliente determina el tamaño del búfer durante su llamada al método IAudioClient::Initialize . Para una secuencia en modo compartido, si el cliente pasa este método un valor de parámetro hnsBufferDuration de 0, el método supone que los períodos del cliente y el motor de audio tienen la garantía de ser iguales y el método asignará un búfer lo suficientemente pequeño como para lograr la latencia mínima posible. (De hecho, cualquier valor hnsBufferDuration entre 0 y la suma del período del motor de audio y la latencia del dispositivo tendrán el mismo resultado). Del mismo modo, para una secuencia en modo exclusivo, si el cliente establece hnsBufferDuration en 0, el método supone que el período del cliente se establece en el período mínimo del dispositivo de punto de conexión de audio y el método asignará un búfer lo suficientemente pequeño como para lograr la latencia mínima posible.

Si el cliente decide ejecutar su subproceso de procesamiento periódico con menos frecuencia, a costa de aumentar la latencia, puede hacerlo siempre y cuando cree un búfer de punto de conexión durante la llamada IAudioClient::Initialize suficientemente grande.

Requisitos

Requisito Value
Cliente mínimo compatible Windows Vista [aplicaciones de escritorio | aplicaciones para UWP]
Servidor mínimo compatible Windows Server 2008 [aplicaciones de escritorio | aplicaciones para UWP]
Plataforma de destino Windows
Encabezado audioclient.h

Consulte también

IAudioClient (interfaz)

IAudioClient::Initialize