Partilhar via


Gestão de Fluxos

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 nessa conexão. WASAPI permite que os clientes criem e gerenciem fluxos de áudio.

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 parâmetro iid definido como REFIID IID_IAudioClient) no objeto de ponto de extremidade.

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

  • Descubra quais formatos de áudio o dispositivo de ponto final suporta.
  • Obtenha o tamanho do buffer do ponto final.
  • Obtenha o formato e a latência do fluxo.
  • Inicie, pare e redefina o fluxo que flui através do dispositivo de ponto final.
  • Aceda a serviços de áudio adicionais.

Para criar um fluxo, um cliente chama o IAudioClient::Initialize método. 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 dividem em dois grupos:

  • Métodos que podem ser chamados somente depois que o fluxo foi aberto pelo IAudioClient::Initialize.
  • Métodos que podem ser chamados a qualquer momento antes ou depois do Inicializar chamada.

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 do IAudioClient::Initialize chamada:

  • IAudioClient::GetDevicePeriod
  • IAudioClient::GetMixFormat
  • IAudioClient::IsFormatSupported

Para acessar os serviços de cliente de áudio adicionais, o cliente chama o IAudioClient::GetService método. 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ê dados capturados de um buffer de ponto de extremidade de captura de áudio.

  • IAudioSessionControl

    Comunica-se com o gestor de sessões de áudio para configurar e gerir 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 do 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 através do interface IAudioSessionManager. Essa interface permite que o cliente obtenha o IAudioSessionControl e interfaces de 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 o interface IAudioSessionManager para um dispositivo de ponto de extremidade de áudio chamando o método IMMDevice::Activate (com parâmetro iid definido como REFIID IID_IAudioSessionManager) 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 o WASAPI para gerenciar fluxos de áudio:

Guia de Programação