Share via


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

O método GetDevicePeriod recupera o comprimento do intervalo periódico que separa o processamento sucessivo passa pelo mecanismo de áudio nos dados no buffer do ponto de extremidade.

Sintaxe

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

Parâmetros

[out] phnsDefaultDevicePeriod

Ponteiro para uma variável REFERENCE_TIME na qual o método grava um valor de tempo especificando o intervalo padrão entre o processamento periódico passado pelo mecanismo de áudio. O tempo é expresso em unidades de 100 nanossegundos. Para obter informações sobre REFERENCE_TIME, consulte a documentação do SDK do Windows.

[out] phnsMinimumDevicePeriod

Ponteiro para uma variável REFERENCE_TIME na qual o método grava um valor de tempo especificando o intervalo mínimo entre o processamento periódico passado pelo dispositivo de ponto de extremidade de áudio. O tempo é expresso em unidades de 100 nanossegundos.

Retornar valor

Se o método for bem-sucedido, retornará S_OK. Se falhar, os códigos de retorno possíveis incluem, mas não se limitam a, os valores mostrados na tabela a seguir.

Código de retorno Descrição
AUDCLNT_E_DEVICE_INVALIDATED
O dispositivo de ponto de extremidade de áudio foi desconectado ou o hardware de áudio ou os recursos de hardware associados foram reconfigurados, desabilitados, removidos ou não estão disponíveis para uso.
AUDCLNT_E_SERVICE_NOT_RUNNING
O serviço de áudio do Windows não está em execução.
E_POINTER
Os parâmetros phnsDefaultDevicePeriod e phnsMinimumDevicePeriod são NULL.

Comentários

O cliente pode chamar esse método antes de chamar o método IAudioClient::Initialize .

O parâmetro phnsDefaultDevicePeriod especifica o período de agendamento padrão para um fluxo de modo compartilhado. O parâmetro phnsMinimumDevicePeriod especifica o período mínimo de agendamento para um fluxo de modo exclusivo.

Pelo menos um dos dois parâmetros, phnsDefaultDevicePeriod e phnsMinimumDevicePeriod, deve ser não NULL ou o método retorna imediatamente com o código de erro E_POINTER. Se ambos os parâmetros não forem NULL, o método produzirá os períodos padrão e mínimo.

Para um fluxo de modo compartilhado, o mecanismo de áudio processa periodicamente os dados no buffer do ponto de extremidade, que o mecanismo compartilha com o aplicativo cliente. O mecanismo agenda-se para executar essas passagens de processamento em intervalos regulares.

O período entre o processamento passa pelo mecanismo de áudio é fixo para um dispositivo de ponto de extremidade de áudio específico e representa o menor quantum de processamento para o mecanismo de áudio. Esse período mais a latência de fluxo entre o buffer e o dispositivo de ponto de extremidade representa a latência mínima possível que um aplicativo de áudio pode alcançar.

O cliente tem a opção de agendar seu thread de processamento periódico para ser executado no mesmo intervalo de tempo que o mecanismo de áudio. Dessa forma, o cliente pode obter a menor latência possível para um fluxo de modo compartilhado. No entanto, em um aplicativo para o qual a latência é menos importante, o cliente pode reduzir a sobrecarga de alternância de processo na CPU agendando suas passagens de processamento para ocorrer com menos frequência. Nesse caso, o buffer de ponto de extremidade deve ser proporcionalmente maior para compensar o período mais longo entre as passagens de processamento.

O cliente determina o tamanho do buffer durante sua chamada para o método IAudioClient::Initialize . Para um fluxo de modo compartilhado, se o cliente passar esse método um valor de parâmetro hnsBufferDuration de 0, o método pressupõe que os períodos para o cliente e o mecanismo de áudio são garantidos como iguais e o método alocará um buffer pequeno o suficiente para obter a latência mínima possível. (Na verdade, qualquer valor hnsBufferDuration entre 0 e a soma do período do mecanismo de áudio e latência do dispositivo terá o mesmo resultado.) Da mesma forma, para um fluxo de modo exclusivo, se o cliente definir hnsBufferDuration como 0, o método pressupõe que o período do cliente seja definido como o período mínimo do dispositivo de ponto de extremidade de áudio e o método alocará um buffer pequeno o suficiente para obter a latência mínima possível.

Se o cliente optar por executar seu thread de processamento periódico com menos frequência, ao custo de maior latência, ele poderá fazer isso desde que crie um buffer de ponto de extremidade durante a chamada IAudioClient::Initialize que seja suficientemente grande.

Requisitos

Requisito Valor
Cliente mínimo com suporte Windows Vista [aplicativos da área de trabalho | Aplicativos UWP]
Servidor mínimo com suporte Windows Server 2008 [aplicativos da área de trabalho | Aplicativos UWP]
Plataforma de Destino Windows
Cabeçalho audioclient.h

Confira também

IAudioClient Interface

IAudioClient::Initialize