Enrutamiento automático de flujos

En este artículo se describe cómo actualizar una implementación wasAPI para aprovechar el enrutamiento automático de flujos.

A partir de Windows 7, cada vez que cambia el dispositivo de audio predeterminado, la secuencia de reproducción de audio de una aplicación se transfiere sin problemas desde el dispositivo de audio predeterminado anterior al nuevo dispositivo de audio predeterminado. Esta transferencia se produce automáticamente sin ningún código de aplicación adicional. Sin embargo, antes de Windows 10, versión 1607, las aplicaciones que usaban la API de sesión de audio (WASAPI) de bajo nivel Windows no podían participar en esta funcionalidad de enrutamiento de flujos automatizado. Las aplicaciones que usan WASAPI tenían que implementar su propia forma de enrutamiento de secuencias agregando código adicional para detectar la llegada y eliminación de dispositivos de audio y cambiar la secuencia a esos dispositivos según corresponda. Las aplicaciones que usan WASAPI que no implementaron su propio mecanismo de enrutamiento de flujos en la llegada del dispositivo o la eliminación arriesgaron a proporcionar una experiencia de usuario menos que ideal.

A partir de la Windows 10, versión 1607, las aplicaciones que usan WASAPI pueden aprovechar el enrutamiento automático de flujos. Si la aplicación usa WASAPI, se recomienda encarecidamente actualizar la aplicación para aprovechar esta nueva funcionalidad mediante los pasos siguientes:

  1. Windows 10, versión 1607, define dos NUEVOS GUID que se pueden usar para activar una interfaz de representación o captura de audio con enrutamiento automático de secuencias, DEVINTERFACE_AUDIO_RENDER y DEVINTERFACE_AUDIO_CAPTURE. Obtenga una representación de cadena de estos GUID llamando a StringFromIID. En el ejemplo siguiente se muestra esta llamada para el GUID de representación de audio.

    PWSTR audioRenderGuidString;
    StringFromIID(DEVINTERFACE_AUDIO_RENDER, &audioRenderGuidString);
    
  2. Active el punto de conexión de audio pasando la cadena de identificador a la función WASAPI ActivateAudioInterfaceAsync . En el ejemplo siguiente se pasa el identificador de representación de audio obtenido en el paso 1:

    //Activate the default audio interface
    ActivateAudioInterfaceAsync(audioRenderGuidString
                                __uuidof(IAudioClient),
                                NULL,
                                completionHandler.Get(),
                                operation.GetAddressOf()));
    
  3. Libere la memoria asignada para contener el identificador del punto de conexión:

    CoTaskMemFree(audioRenderGuidString);  //free the string memory
    

Después de haber modificado la aplicación para activar la interfaz de audio de la manera descrita anteriormente, participará en la característica de enrutamiento automático de secuencias.

Para demostrar el enrutamiento automático de secuencias, use un portátil o tableta equipado con altavoces internos para reproducir audio. Debería escuchar el audio que se reproduce a través de los altavoces internos del dispositivo. Mientras se reproduce el audio, conecte un par de auriculares. Ahora debería escuchar audio reproduciendo a través de los auriculares. A continuación, desenchufe los auriculares y el audio deben redirigirse automáticamente a los altavoces internos.

Enrutamiento de flujos

MediaDevice.GetDefaultAudioRenderId

MediaDevice.GetDefaultAudioCaptureId

ActivateAudioInterfaceAsync