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:
- IAudioClient::GetBufferSize
- IAudioClient::GetCurrentPadding
- IAudioClient::GetService
- IAudioClient::GetStreamLatency
- IAudioClient::Reset
- IAudioClient::Start
- IAudioClient::Stop
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:
-
Grava dados de renderização em um buffer de ponto de extremidade de renderização de áudio.
-
Lê 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 evento, o cliente passa um ponteiro para sua interface IAudioSessionEvents para o método IAudioSessionControl::RegisterAudioSessionNotification como um parâmetro de chamada.
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:
- sobre WASAPI
- renderizando um de fluxo
- capturando uma de fluxo
- de gravação em loopback
- Exclusive-Mode Streams
- recuperando de uma de erro de Invalid-Device
- usando um dispositivo de comunicação
- de Roteamento de Fluxo
Tópicos relacionados