Compartir a través de


Grabación de bucle invertido

En modo de bucle invertido, un cliente de WASAPI puede capturar la secuencia de audio que está reproduciendo un dispositivo de punto de conexión de representación. Para abrir una secuencia en modo de bucle invertido, el cliente debe:

  • Obtenga una interfaz IMMDevice para el dispositivo de punto de conexión de representación.
  • Inicialice una secuencia de captura en modo de bucle invertido en el dispositivo de punto de conexión de representación.

Después de seguir estos pasos, el cliente puede llamar al método IAudioClient::GetService para obtener una interfaz IAudioCaptureClient en el dispositivo de punto de conexión de representación.

WASAPI proporciona el modo de bucle invertido principalmente para admitir la cancelación acústica de eco (AEC). Sin embargo, otros tipos de aplicaciones de audio pueden encontrar el modo de bucle invertido útil para capturar la combinación del sistema que está reproduciendo el motor de audio.

En el ejemplo de código de Captura de una secuencia, la función RecordAudioStream se puede modificar fácilmente para configurar un flujo de captura en modo bucle invertido. Las modificaciones necesarias son:

En versiones de Windows anteriores a Windows 10 1703, el cliente de captura en modo de extracción no recibe ningún evento cuando una secuencia se inicializa con el almacenamiento en búfer controlado por eventos y está habilitado para bucle invertido. Para solucionarlo, inicialice una secuencia de representación en modo controlado por eventos. Cada vez que el cliente recibe un evento para la secuencia de representación, debe indicar al cliente de captura que ejecute el subproceso de captura que lee el siguiente conjunto de ejemplos del búfer del punto de conexión de captura. En las versiones 1703 y posteriores de Windows 10, se admiten los clientes de bucle invertido controlado por eventos y ya no necesitan la solución alternativa que implica la secuencia de representación.

Un cliente solo puede habilitar el modo de bucle invertido para una secuencia en modo compartido (AUDCLNT_SHAREMODE_SHARED). Las secuencias en modo exclusivo no pueden funcionar en modo de bucle invertido.

La implementación de bucle invertido por WASAPI depende de las funcionalidades del hardware. Si el hardware admite un pin de bucle invertido en el punto de conexión de representación, WASAPI usa el audio proporcionado en este pin para la secuencia de bucle invertido. Cuando el hardware no admite un pin de bucle invertido, WASAPI copia la secuencia de salida del motor de audio en el búfer de captura de la aplicación de bucle invertido, además de copiar los datos de audio en el pin de representación del hardware.

Algunos proveedores de hardware implementan dispositivos de bucle invertido (en lugar de anclar instancias en dispositivos de representación) en sus adaptadores de audio. Aunque los dispositivos de bucle invertido de hardware son similares en funcionamiento al modo de bucle invertido WASAPI, pueden ser más difíciles de usar.

Los dispositivos de bucle invertido de hardware tienen las siguientes desventajas para las aplicaciones de audio:

  • No todos los adaptadores de audio tienen dispositivos de bucle invertido. Por lo tanto, las aplicaciones que dependen de ellas no funcionarán en todos los sistemas.
  • Para que una aplicación pueda registrar desde un dispositivo de bucle invertido, el usuario debe identificar el dispositivo de bucle invertido y habilitarlo para su uso.

Los distintos proveedores asignan nombres diferentes a sus dispositivos de bucle invertido de hardware. Los nombres siguientes son ejemplos:

  • Combinación estéreo
  • Combinación de waveout
  • Salida mixta
  • Lo que escuchas

La falta de nombres estandarizados puede hacer que los usuarios tengan dificultades para identificar un dispositivo de bucle invertido en una lista de nombres de dispositivo.

Un dispositivo de bucle invertido de hardware es un dispositivo de captura. Por lo tanto, si un adaptador admite un dispositivo de bucle invertido, una aplicación de audio puede grabar desde el dispositivo de la misma manera que registra desde cualquier otro dispositivo de captura.

Por ejemplo, si selecciona un dispositivo de bucle invertido de hardware para que sea el dispositivo de captura predeterminado, puede usar la función RecordAudioStream (sin modificaciones) en el ejemplo de código de Captura de un flujo para capturar la secuencia desde el dispositivo. (También puede usar una API de audio heredada, como las funciones waveInXxx multimedia de Windows, para capturar la secuencia del dispositivo).

Si el adaptador de audio contiene un dispositivo de bucle invertido de hardware, puede usar el panel de control multimedia de Windows, Mmsys.cpl, para designar el dispositivo como dispositivo de captura predeterminado. Los pasos son los siguientes:

  1. Para ejecutar Mmsys.cpl, abra una ventana del símbolo del sistema y escriba el siguiente comando:

    control mmsys.cpl
    

    Como alternativa, puede ejecutar Mmsys.cpl haciendo clic con el botón derecho en el icono del altavoz en el área de notificación, que se encuentra en el lado derecho de la barra de tareas y seleccionando Dispositivos de grabación.

  2. Una vez que se abra la ventana Mmsys.cpl, haga clic con el botón derecho en cualquier parte de la lista de dispositivos de grabación y compruebe que la opción Mostrar dispositivos deshabilitados esté activada. (De lo contrario, si el dispositivo de bucle invertido está deshabilitado, no aparecerá en la lista).

  3. Examine la lista de dispositivos de grabación para localizar el dispositivo de bucle invertido (si existe). Si el dispositivo de bucle invertido está deshabilitado, habilite haciendo clic con el botón derecho en el dispositivo y haciendo clic en Habilitar.

  4. Por último, para seleccionar el dispositivo de bucle invertido para que sea el dispositivo de captura predeterminado, haga clic con el botón derecho en el dispositivo y haga clic en Establecer como dispositivo predeterminado.

WASAPI admite la grabación de bucle invertido independientemente de si el hardware de audio contiene un dispositivo de bucle invertido o si el usuario ha habilitado el dispositivo.

Windows Vista proporciona administración de derechos digitales (DRM). Los proveedores de contenido dependen de DRM para proteger su música propietaria u otro contenido frente a copias no autorizadas y otros usos ilegales. De forma similar, un controlador de audio de confianza no permite que un dispositivo de bucle invertido capture secuencias digitales que contengan contenido protegido. Windows Vista solo permite que los controladores de confianza reproduzcan contenido protegido. Para obtener más información sobre los controladores de confianza y DRM, consulte la documentación de Windows DDK.

WasAPI loopback de forma predeterminada contiene la combinación de todo el audio que se está reproduciendo, independientemente de la sesión de Terminal Services desde la que se originó el audio. Por ejemplo, puede ejecutar un cliente de bucle invertido en un servicio que se ejecuta en la sesión 0 y capturar audio de todas las sesiones de usuario, así como el audio que se reproduce desde la sesión 0.

A partir de la compilación 20348 de Windows 10, puedes incluir o excluir procesos específicos y sus elementos secundarios de la captura de bucle invertido pasando un AUDIOCLIENT_ACTIVATION_PARAMS en la llamada a IMMDevice::Activate. Consulte el ejemplo de captura de audio de bucle invertido de aplicación.

Escritorio remoto permite redirigir el audio al cliente. Esto se implementa mediante la creación de nuevos dispositivos de audio que solo aparecen para esa sesión.

Administración de flujos