Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
No modo de loopback, um cliente do WASAPI pode capturar o fluxo de áudio que está a ser reproduzido por um dispositivo de saída de áudio. 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.
- Inicie um fluxo de captura em modo de retorno no dispositivo de ponto terminal de renderização.
Depois de seguir essas etapas, o cliente pode chamar o métodoIAudioClient::GetServicepara obter uma interfaceIAudioCaptureClientno dispositivo de ponto de extremidade de renderização.
O WASAPI fornece o modo de loopback principalmente para suportar cancelamento de eco acústico (AEC). No entanto, outros tipos de aplicações de áudio podem achar o modo de loopback útil para capturar a mixagem do sistema que está a ser reproduzida pelo motor de áudio.
No exemplo de código em Capture a Stream, a função RecordAudioStream pode ser facilmente modificada para configurar um fluxo de captura em modo de loopback. As modificações necessárias são:
- Na chamada para o métodoIMMDeviceEnumerator::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 em modo de receção pull não recebe nenhum evento quando um fluxo é inicializado com buffer controlado por eventos e com loopback ativado. Para contornar isso, inicialize um fluxo de renderização no modo controlado por eventos. Sempre que o cliente recebe um evento para o fluxo de renderização, deve sinalizar ao cliente de captura para executar o thread de captura que lê o próximo conjunto de amostras do buffer do ponto de extremidade de captura. No Windows 10 versões 1703 e superiores, os clientes de loopback controlados por 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 loopback apenas para um fluxo em 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 das capacidades do hardware. Se o hardware suportar uma conexão de retorno no ponto de extremidade de renderização, o WASAPI usará o áudio fornecido nessa conexão para a transmissão de retorno. Quando o hardware não suporta 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 oposição a instâncias de pino em dispositivos de renderização) em seus adaptadores de áudio. Embora os dispositivos de loopback de hardware sejam semelhantes no funcionamento 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 aos seus dispositivos de loopback de hardware. Os seguintes nomes são exemplos:
- Mistura estéreo
- Mistura Waveout
- Produção 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 hardware de loopback é um dispositivo de captura. Assim, se um adaptador suporta um dispositivo de loopback, um aplicativo de áudio pode 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 multimídia do Windows waveInXxx, 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 de prompt de comando e digite o seguinte comando:
control mmsys.cplComo alternativa, você pode executar Mmsys.cpl clicando com o botão direito do mouse no ícone do alto-falante na área de notificação, que está localizada no lado direito da barra de tarefas, e selecionando Dispositivos de gravação.
Depois que a janela Mmsys.cpl abrir, 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 desativado, ele não aparecerá na lista.)
Navegue na lista de dispositivos de gravação para localizar o dispositivo de loopback (se existir). Se o dispositivo de loopback estiver desativado, ative-o clicando com o botão direito do mouse no dispositivo e clicando em Ativar.
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 suporta gravação de loopback, independentemente de o hardware de áudio conter um dispositivo de loopback ou de o usuário ter ativado 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 Windows DDK.
Por padrão, 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 á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.
Tópicos relacionados