Gravação de loopback
No modo de loopback, um cliente do WASAPI pode capturar o fluxo de áudio que está sendo reproduzido por um dispositivo de ponto de extremidade de renderização. Para abrir um fluxo no modo de loopback, o cliente deve:
- Obtenha uma interface IMMDevice para o dispositivo de ponto de extremidade de renderização.
- Inicialize um fluxo de captura no modo de loopback no dispositivo de ponto de extremidade de renderização.
Depois de seguir essas etapas, o cliente pode chamar o método IAudioClient::GetService para obter uma interface IAudioCaptureClient no dispositivo de ponto de extremidade de renderização.
O WASAPI fornece o modo de loopback principalmente para dar suporte ao cancelamento de eco acústico (AEC). No entanto, outros tipos de aplicativos de áudio podem achar o modo de loopback útil para capturar a combinação do sistema que está sendo reproduzida pelo mecanismo de áudio.
No exemplo de código em Capturando um fluxo, a função RecordAudioStream pode ser facilmente modificada para configurar um fluxo de captura no modo de loopback. As modificações necessárias são:
- Na chamada para o método IMMDeviceEnumerator::GetDefaultAudioEndpoint , altere o primeiro parâmetro (dataFlow) de eCapture para eRender.
- Na chamada para o método IAudioClient::Initialize , altere o valor do segundo parâmetro (StreamFlags) de 0 para AUDCLNT_STREAMFLAGS_LOOPBACK.
Em versões do Windows anteriores ao Windows 10 1703, o cliente de captura do modo pull não recebe nenhum evento quando um fluxo é inicializado com buffer controlado por eventos e é habilitado para loopback. Para contornar isso, inicialize um fluxo de renderização no modo controlado por eventos. Cada vez que o cliente recebe um evento para o fluxo de renderização, ele deve sinalizar ao cliente de captura para executar o thread de captura que lê o próximo conjunto de exemplos do buffer do ponto de extremidade de captura. No Windows 10 versões 1703 e superiores, há suporte para clientes de loopback controlados por eventos e não precisam mais da solução alternativa que envolve o fluxo de renderização.
Um cliente pode habilitar o modo de loopback somente para um fluxo de modo compartilhado (AUDCLNT_SHAREMODE_SHARED). Os fluxos de modo exclusivo não podem operar no modo de loopback.
A implementação do loopback pelo WASAPI depende dos recursos do hardware. Se o hardware der suporte a um pino de loopback no ponto de extremidade de renderização, o WASAPI usará o áudio fornecido nesse pino para o fluxo de loopback. Quando o hardware não dá suporte a um pino de loopback, o WASAPI copia o fluxo de saída do mecanismo de áudio para o buffer de captura do aplicativo de loopback, além de copiar os dados de áudio para o pino de renderização do hardware.
Alguns fornecedores de hardware implementam dispositivos de loopback (em vez de instâncias de fixação em dispositivos de renderização) em seus adaptadores de áudio. Embora os dispositivos de loopback de hardware sejam semelhantes em operação ao modo de loopback WASAPI, eles podem ser mais difíceis de usar.
Os dispositivos de loopback de hardware têm as seguintes desvantagens para aplicativos de áudio:
- Nem todos os adaptadores de áudio têm dispositivos de loopback. Assim, os aplicativos que dependem deles não funcionarão em todos os sistemas.
- Antes que um aplicativo possa gravar de um dispositivo de loopback, o usuário deve identificar o dispositivo de loopback e habilitá-lo para uso.
Diferentes fornecedores atribuem nomes diferentes aos seus dispositivos de loopback de hardware. Os nomes a seguir são exemplos:
- Mixagem estéreo
- Mistura de ondas
- Saída mista
- O que você ouve
A falta de nomes padronizados pode fazer com que os usuários tenham dificuldade em identificar um dispositivo de loopback em uma lista de nomes de dispositivos.
Um dispositivo de loopback de hardware é um dispositivo de captura. Assim, se um adaptador der suporte a um dispositivo de loopback, um aplicativo de áudio poderá gravar do dispositivo da mesma forma que grava de qualquer outro dispositivo de captura.
Por exemplo, se você selecionar um dispositivo de loopback de hardware para ser o dispositivo de captura padrão, poderá usar a função RecordAudioStream (sem modificação) no exemplo de código em Capturando um fluxo para capturar o fluxo do dispositivo. (Você também pode usar uma API de áudio herdada, como as funções waveInXxx multimídia do Windows, para capturar o fluxo do dispositivo.)
Se o adaptador de áudio contiver um dispositivo de loopback de hardware, você poderá usar o painel de controle multimídia do Windows, Mmsys.cpl, para designar o dispositivo como o dispositivo de captura padrão. As etapas são as seguintes:
Para executar Mmsys.cpl, abra uma janela do Prompt de Comando e digite o seguinte comando:
control mmsys.cpl
Como alternativa, você pode executar Mmsys.cpl clicando com o botão direito do mouse no ícone do alto-falante na área de notificação, localizada no lado direito da barra de tarefas, e selecionando Dispositivos de gravação.
Depois que a janela Mmsys.cpl for aberta, clique com o botão direito do mouse em qualquer lugar da lista de dispositivos de gravação e verifique se a opção Mostrar dispositivos desativados está marcada. (Caso contrário, se o dispositivo de loopback estiver desabilitado, ele não aparecerá na lista.)
Navegue pela lista de dispositivos de gravação para localizar o dispositivo de loopback (se existir). Se o dispositivo de loopback estiver desabilitado, habilite-o clicando com o botão direito do mouse no dispositivo e clicando em Habilitar.
Por fim, para selecionar o dispositivo de loopback para ser o dispositivo de captura padrão, clique com o botão direito do mouse no dispositivo e clique em Definir como Dispositivo Padrão.
O WASAPI dá suporte à gravação de loopback, independentemente de o hardware de áudio conter um dispositivo de loopback ou se o usuário habilitou o dispositivo.
O Windows Vista fornece DRM (gerenciamento de direitos digitais). Os provedores de conteúdo contam com o DRM para proteger sua música proprietária ou outro conteúdo contra cópias não autorizadas e outros usos ilegais. Da mesma forma, um driver de áudio confiável não permite que um dispositivo de loopback capture fluxos digitais que contenham conteúdo protegido. O Windows Vista permite que apenas drivers confiáveis reproduzam conteúdo protegido. Para obter mais informações sobre drivers confiáveis e DRM, consulte a documentação do DDK do Windows.
Por padrão, o loopback WASAPI contém a combinação de todo o áudio que está sendo reproduzido, independentemente da sessão dos Serviços de Terminal da qual o áudio se originou. Por exemplo, você pode executar um cliente de loopback em um serviço em execução na sessão 0 e capturar áudio de todas as sessões do usuário, bem como o áudio que está sendo reproduzido da sessão 0.
A partir do Windows 10 Build 20348, você pode incluir ou excluir processos específicos e seus filhos da captura de loopback passando um AUDIOCLIENT_ACTIVATION_PARAMS na chamada para IMMDevice::Activate. Consulte o exemplo de captura de áudio de loopback do aplicativo.
A Área de Trabalho Remota permite redirecionar o áudio para o cliente. Isso é implementado criando novos dispositivos de áudio que aparecem apenas para essa sessão.
Tópicos relacionados