Share 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. O WASAPI permite que os clientes criem e gerenciem fluxos de áudio.

O WASAPI implementa várias interfaces para fornecer serviços de gerenciamento de fluxo para clientes de áudio. A interface principal é 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 REFIID IID_IAudioClient) no objeto de ponto de extremidade.

O cliente chama os métodos na interface IAudioClient para fazer o seguinte:

  • Descubra quais formatos de áudio o dispositivo de ponto de extremidade suporta.
  • Obtenha o tamanho do buffer do ponto de extremidade.
  • Obtenha o formato de fluxo e a latência.
  • Iniciar, parar e redefinir o fluxo que flui através do 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 de ponto de extremidade e se o fluxo opera no modo compartilhado ou exclusivo.

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

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

Os seguintes métodos 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 . Através deste 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ê os 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:

Finalmente, 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. Uma API de nível superior normalmente não fornece esse acesso. O cliente pode obter os controles para uma sessão específica por meio da interface IAudioSessionManager. Essa interface permite que o cliente obtenha as interfaces IAudioSessionControl e ISimpleAudioVolume para uma sessão sem exigir que o cliente use a interface IAudioClient para 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 REFIID IID_IAudioSessionManager) no objeto de ponto de extremidade.

As interfaces IAudioSessionControl, IAudioSessionEvents e 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 o WASAPI para gerenciar fluxos de áudio:

Guia de programação