Compartilhar via


Gerenciamento de fluxo

Depois de enumerar os dispositivos de ponto de extremidade de áudio no sistema e identificar um dispositivo de renderização ou captura adequado, a próxima tarefa para um aplicativo cliente de áudio é abrir uma conexão com o dispositivo de ponto de extremidade e gerenciar o fluxo de dados de áudio por essa conexão. WASAPI permite que os clientes criem e gerenciem fluxos de áudio.

A WASAPI implementa várias interfaces para fornecer serviços de gerenciamento de fluxo para clientes de áudio. A interface primária é IAudioClient. Um cliente obtém a interface IAudioClient para um dispositivo de ponto de extremidade de áudio chamando o método IMMDevice::Activate (com o parâmetro iid definido como IID_IAudioClient REFIID) no objeto do ponto de extremidade.

O cliente chama os métodos na interfaceIAudioClientpara fazer o seguinte:

  • Descubra quais formatos de áudio o dispositivo de ponto de extremidade dá suporte.
  • Obtenha o tamanho do buffer do ponto de extremidade.
  • Obtenha o formato de fluxo e a latência.
  • Inicie, pare e redefina o fluxo que flui pelo dispositivo de ponto de extremidade.
  • Acesse serviços de áudio adicionais.

Para criar um fluxo, um cliente chama o método IAudioClient::Initialize. Por meio desse método, o cliente especifica o formato de dados para o fluxo, o tamanho do buffer do ponto de extremidade e se o fluxo opera no modo compartilhado ou exclusivo.

Os métodos restantes na interface deIAudioClientse enquadram em dois grupos:

  • Métodos que só podem ser chamados após a abertura do fluxo por IAudioClient::Initialize.
  • Métodos que podem ser chamados a qualquer momento antes ou depois da chamada Inicializar.

Os métodos a seguir só podem ser chamados após a chamada para IAudioClient::Initialize:

Os métodos a seguir podem ser chamados antes ou depois da chamada IAudioClient::Initialize:

Para acessar os serviços de cliente de áudio adicionais, o cliente chama o método IAudioClient::GetService. Por meio desse método, o cliente pode obter referências para as seguintes interfaces:

  • IAudioRenderClient

    Grava dados de renderização em um buffer de ponto de extremidade de renderização de áudio.

  • IAudioCaptureClient

    Lê dados capturados de um buffer de ponto de extremidade de captura de áudio.

  • IAudioSessionControl

    Comunica-se com o gerenciador de sessão de áudio para configurar e gerenciar a sessão de áudio associada ao fluxo.

  • ISimpleAudioVolume

    Controla o nível de volume da sessão de áudio associada ao fluxo.

  • IChannelAudioVolume

    Controla os níveis de volume dos canais individuais na sessão de áudio associada ao fluxo.

  • IAudioClock

    Monitora a taxa de dados de fluxo e a posição do fluxo.

Além disso, os clientes WASAPI que exigem notificação de eventos relacionados à sessão devem implementar a seguinte interface:

Por fim, um cliente pode usar uma API de nível superior para criar um fluxo de áudio, mas também exigir acesso aos controles de sessão e controles de volume para a sessão que contém o fluxo. Normalmente, uma API de nível superior não fornece esse acesso. O cliente pode obter os controles de uma sessão específica por meio da interfaceIAudioSessionManager. Essa interface permite que o cliente obtenha as interfaces IAudioSessionControl e ISimpleAudioVolume para uma sessão sem exigir que o cliente use a interfaceIAudioClientpara criar um fluxo e atribuir o fluxo à sessão. Um cliente obtém a interface IAudioSessionManager para um dispositivo de ponto de extremidade de áudio chamando o método IMMDevice::Activate (com o parâmetro iid definido como IID_IAudioSessionManager REFIID) no objeto de ponto de extremidade.

As interfaces IAudioSessionControl, IAudioSessionEventse IAudioSessionManager são definidas no arquivo de cabeçalho Audiopolicy.h. Todas as outras interfaces WASAPI são definidas no arquivo de cabeçalho Audioclient.h.

As seções a seguir descrevem como usar WASAPI para gerenciar fluxos de áudio:

Guia de Programação