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:
- Métodos que podem ser chamados somente depois que o fluxo foi aberto por IAudioClient::Initialize.
- Métodos que podem ser chamados a qualquer momento antes ou depois da chamada Initialize .
Os seguintes métodos podem ser chamados somente após a chamada para IAudioClient::Initialize:
- IAudioClient::GetBufferSize
- IAudioClient::GetCurrentPadding
- IAudioClient::GetService
- IAudioClient::GetStreamLatency
- IAudioClient::Redefinir
- IAudioClient::Início
- IAudioClient::Parar
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:
-
Grava dados de renderização em um buffer de ponto de extremidade de renderização de áudio.
-
Lê os dados capturados de um buffer de ponto de extremidade de captura de áudio.
-
Comunica-se com o gerenciador de sessão de áudio para configurar e gerenciar a sessão de áudio associada ao fluxo.
-
Controla o nível de volume da sessão de áudio associada ao fluxo.
-
Controla os níveis de volume dos canais individuais na sessão de áudio associada ao fluxo.
-
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:
-
Para receber notificações de eventos, o cliente passa um ponteiro para sua interface IAudioSessionEvents para o método IAudioSessionControl::RegisterAudioSessionNotification como um parâmetro de chamada.
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:
- Sobre o WASAPI
- Renderizando um fluxo
- Capturando um fluxo
- Gravação de loopback
- Transmissões em modo exclusivo
- Recuperando-se de um erro de dispositivo inválido
- Usando um dispositivo de comunicação
- Roteamento de fluxo
Tópicos relacionados