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 suportar o cancelamento de eco acústico (AEC). No entanto, outros tipos de aplicativos de áudio podem achar o modo de loopback útil para capturar a mistura 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:

Em versões do Windows anteriores ao Windows 10 1703, o cliente de captura de modo de recepção 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 o cliente de captura para executar o thread de captura que lê o próximo conjunto de amostras do buffer de ponto de extremidade de captura. No Windows 10 versões 1703 e superiores, os clientes de loopback orientados a eventos são suportados e não precisam mais da solução alternativa envolvendo 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 de loopback pelo WASAPI depende dos recursos do hardware. Se o hardware oferecer 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 oferece 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 pino 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 a partir de um dispositivo de loopback, o usuário deve identificar o dispositivo de loopback e habilitá-lo para uso.

Diferentes fornecedores atribuem nomes diferentes a seus dispositivos de loopback de hardware. Os nomes a seguir são exemplos:

  • Mixagem Estéreo
  • Mistura Waveout
  • 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 suportar um dispositivo de loopback, um aplicativo de áudio poderá gravar a partir 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:

  1. 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.

  2. Depois que a janela Mmsys.cpl for aberta, clique com o botão direito do mouse em qualquer lugar na lista de dispositivos de gravação e verifique se a opção Mostrar dispositivos desabilitados está marcada. (Caso contrário, se o dispositivo de loopback estiver desabilitado, ele não aparecerá na lista.)

  3. 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.

  4. Finalmente, 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 oferece suporte à gravação de loopback, independentemente de o hardware de áudio conter um dispositivo de loopback ou se o usuário tiver habilitado o dispositivo.

O Windows Vista fornece gerenciamento de direitos digitais (DRM). Os provedores de conteúdo dependem do DRM para proteger suas músicas proprietárias ou outros conteúdos 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.

O loopback WASAPI contém a mistura 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 sendo reproduzido da sessão 0.

A Área de Trabalho Remota permite redirecionar o áudio para o cliente. Isso é implementado criando novos dispositivos de áudio que só aparecem para essa sessão.

Gerenciamento de fluxo