Compartilhar via


Método IAudioClient3::InitializeSharedAudioStream (audioclient.h)

Inicializa um fluxo compartilhado com a periodicidade especificada.

Sintaxe

HRESULT InitializeSharedAudioStream(
  [in]           DWORD              StreamFlags,
  [in]           UINT32             PeriodInFrames,
  [in]           const WAVEFORMATEX *pFormat,
  [in, optional] LPCGUID            AudioSessionGuid
);

Parâmetros

[in] StreamFlags

Tipo: DWORD

Sinalizadores para controlar a criação do fluxo. O cliente deve definir esse parâmetro como 0 ou como OR bit a bit de uma ou mais das constantes de AUDCLNT_STREAMFLAGS_XXX com suporte ou constantes AUDCLNT_SESSIONFLAGS_XXX. As constantes de AUDCLNT_STREAMFLAGS_XXX com suporte para esse parâmetro ao usar esse método são:

  • AUDCLNT_STREAMFLAGS_EVENTCALLBACK

[in] PeriodInFrames

Tipo: UINT32

Periodicidade solicitada pelo cliente. Esse valor deve ser um múltiplo integral do valor retornado no parâmetro pFundamentalPeriodInFrames para IAudioClient3::GetSharedModeEnginePeriod. PeriodInFrames também deve ser maior ou igual ao valor retornado em pMinPeriodInFrames e menor ou igual ao valor retornado em pMaxPeriodInFrames.

[in] pFormat

Tipo: const WAVEFORMATEX*

Ponteiro para um descritor de formato. Esse parâmetro deve apontar para um descritor de formato válido do tipo WAVEFORMATEX ou WAVEFORMATEXTENSIBLE. Para obter mais informações, consulte a seção Comentários para IAudioClient::Initialize.

[in, optional] AudioSessionGuid

Tipo: LPCGUID

Ponteiro para um GUID de sessão. Esse parâmetro aponta para um valor GUID que identifica a sessão de áudio à qual o fluxo pertence. Se o GUID identificar uma sessão que foi aberta anteriormente, o método adicionará o fluxo a essa sessão. Se o GUID não identificar uma sessão existente, o método abrirá uma nova sessão e adicionará o fluxo a essa sessão. O fluxo permanece um membro da mesma sessão durante seu tempo de vida. Definir esse parâmetro como NULL é equivalente a passar um ponteiro para um valor de GUID_NULL.

Retornar valor

Tipo: HRESULT

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_ALREADY_INITIALIZED
O objeto IAudioClient já está inicializado.
AUDCLNT_E_WRONG_ENDPOINT_TYPE
O sinalizador AUDCLNT_STREAMFLAGS_LOOPBACK está definido, mas o dispositivo de ponto de extremidade é um dispositivo de captura, não um dispositivo de renderização.
AUDCLNT_E_CPUUSAGE_EXCEEDED
Indica que a duração da passagem de processo excedeu o uso máximo da CPU. O mecanismo de áudio controla o uso da CPU mantendo o número de vezes que a duração do processo excede o uso máximo da CPU. O uso máximo da CPU é calculado como um percentual da periodicidade do mecanismo. O valor percentual é o valor de limitação da CPU do sistema (dentro do intervalo de 10% e 90%). Se esse valor não for encontrado, o valor padrão de 40% será usado para calcular o uso máximo da CPU.
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 indisponíveis para uso.
AUDCLNT_E_DEVICE_IN_USE
O dispositivo de ponto de extremidade já está em uso. O dispositivo está sendo usado no modo exclusivo ou o dispositivo está sendo usado no modo compartilhado e o chamador pediu para usar o dispositivo no modo exclusivo.
AUDCLNT_E_ENGINE_FORMAT_LOCKED
O cliente especificou AUDCLNT_STREAMOPTIONS_MATCH_FORMAT ao chamar IAudioClient2::SetClientProperties, mas o formato do mecanismo de áudio foi bloqueado por outro cliente. Nesse caso, você pode chamar IAudioClient2::SetClientProperties sem especificar a opção de formato de correspondência e, em seguida, usar o formato atual do mecanismo de áudio.
AUDCLNT_E_ENGINE_PERIODICITY_LOCKED
O cliente especificou AUDCLNT_STREAMOPTIONS_MATCH_FORMAT ao chamar IAudioClient2::SetClientProperties, mas a periodicidade do mecanismo de áudio foi bloqueada por outro cliente. Nesse caso, você pode chamar IAudioClient2::SetClientProperties sem especificar a opção de formato de correspondência e, em seguida, usar a periodicidade atual do mecanismo de áudio.
AUDCLNT_E_ENDPOINT_CREATE_FAILED
O método falhou ao criar o ponto de extremidade de áudio para a renderização ou o dispositivo de captura. Isso poderá ocorrer se o dispositivo de ponto de extremidade de áudio tiver sido desconectado ou se o hardware de áudio ou os recursos de hardware associados tiverem sido reconfigurados, desabilitados, removidos ou não estiverem disponíveis para uso.
AUDCLNT_E_INVALID_DEVICE_PERIOD
Indica que o período de dispositivo solicitado especificado com PeriodInFrames não é um múltiplo integral da periodicidade fundamental do mecanismo de áudio, é menor que o período mínimo do mecanismo ou é maior que o período máximo do mecanismo. Obtenha os valores de periodicidade com suporte do mecanismo chamando IAudioClient3::GetSharedModeEnginePeriod.
AUDCLNT_E_UNSUPPORTED_FORMAT
O mecanismo de áudio (modo compartilhado) ou o dispositivo de ponto de extremidade de áudio (modo exclusivo) não dá suporte ao formato especificado.
AUDCLNT_E_SERVICE_NOT_RUNNING
O serviço de áudio do Windows não está em execução.
E_POINTER
O parâmetro pFormat é NULL.
E_INVALIDARG
O parâmetro pFormat aponta para uma descrição de formato inválida; ou o sinalizador AUDCLNT_STREAMFLAGS_LOOPBACK está definido, mas ShareMode não é igual a AUDCLNT_SHAREMODE_SHARED; ou o sinalizador AUDCLNT_STREAMFLAGS_CROSSPROCESS está definido, mas ShareMode é igual a AUDCLNT_SHAREMODE_EXCLUSIVE.

Uma chamada anterior para SetClientProperties foi feita com uma categoria inválida para fluxos de áudio/renderização.

E_OUTOFMEMORY
Sem memória.

Comentários

Ao contrário de IAudioClient::Initialize, esse método não permite que você especifique um tamanho de buffer. O tamanho do buffer é calculado com base na periodicidade solicitada com o parâmetro PeriodInFrames . É responsabilidade do aplicativo cliente garantir que os exemplos de áudio sejam transferidos para dentro e para fora do buffer em tempo hábil.

Os clientes de áudio devem marcar valores permitidos para o parâmetro PeriodInFrames chamando IAudioClient3::GetSharedModeEnginePeriod. O valor de PeriodInFrames deve ser um múltiplo integral do valor retornado no parâmetro pFundamentalPeriodInFrames . PeriodInFrames também deve ser maior ou igual ao valor retornado em pMinPeriodInFrames e menor ou igual ao valor de pMaxPeriodInFrames.

Por exemplo, para um formato de 44100 kHz, GetSharedModeEnginePeriod pode retornar:

  • pDefaultPeriodInFrames = 448 quadros (cerca de 10,16 milissegundos)

  • pFundamentalPeriodInFrames = 4 quadros (cerca de 0,09 milissegundos)

  • pMinPeriodInFrames = 48 quadros (cerca de 1,09 milissegundos)

  • pMaxPeriodInFrames = 448 quadros (o mesmo que o padrão)

Os valores permitidos para o parâmetro PeriodInFrames para InitializeSharedAudioStream incluiriam 48 e 448. Eles também incluiriam coisas como 96 e 128.

Eles NÃO incluiriam 4 (que é menor que o valor mínimo permitido) ou 98 (que não é um múltiplo do fundamental) ou 1000 (que é maior que o valor máximo permitido).

Requisitos

Requisito Valor
Cliente mínimo com suporte Windows 10 [somente aplicativos da área de trabalho]
Servidor mínimo com suporte Windows Server 2016 [somente aplicativos da área de trabalho]
Plataforma de Destino Windows
Cabeçalho audioclient.h

Confira também

IAudioClient

IAudioClient2

IAudioClient3