Compartir a través de


Notificaciones pertinentes para el enrutamiento de flujos

En Windows 7, las API de plataforma de alto nivel que usan las API de audio principal, como las API de Media Foundation, DirectSound y Wave, implementan la característica de enrutamiento de secuencias controlando el cambio de flujo de un dispositivo existente a un nuevo punto de conexión de audio predeterminado. Las aplicaciones multimedia que usan estas API usan el comportamiento de enrutamiento de flujos sin modificaciones en el origen. Los clientes WASAPI directos pueden usar las notificaciones enviadas por los componentes de Core Audio e implementar la característica de enrutamiento de secuencias.

Para implementar la característica de enrutamiento de flujos, un cliente debe escuchar dos tipos de eventos: notificaciones de cambio de dispositivo y notificaciones de desconexión de sesión. En la implementación proporcionada por las API de alto nivel, estos eventos se envían para los puntos de conexión de dispositivo predeterminados creados mediante una llamada a IMMDeviceEnumerator::GetDefaultAudioEndpoint. Para obtener más información, consulte Obtención del punto de conexión de dispositivo para el enrutamiento de flujos.

El componente de audio principal MMDeviceAPI ofrece devoluciones de llamada de notificación cuando se agregan, quitan o modifican dispositivos de audio. Los cambios de la sesión de audio y formato se notifican como eventos a través de WASAPI.

Notificaciones de cambio de dispositivo

MMDeviceAPI genera eventos cuando se agregan, quitan o modifican dispositivos de audio. Si el cliente va a proporcionar funcionalidad de enrutamiento de flujos, debe implementar la interfaz IMMNotificationClient y registrar su implementación con MMDeviceAPI.

Para obtener notificaciones de cambio de dispositivo, el cliente debe realizar las siguientes tareas:

Una vez registrada la implementación del cliente de estas interfaces, el cliente recibe notificaciones en forma de devoluciones de llamada a través de los métodos de estas interfaces. MMDeviceAPI llama a los métodos IMMNotificationClient cuando genera eventos de nivel de punto de conexión (cambios de estado del punto de conexión, nuevas llegadas de puntos de conexión, eliminaciones de puntos de conexión, cambios de punto de conexión predeterminados y cambios de propiedad de punto de conexión).

Si el cliente quiere proporcionar enrutamiento de flujos para el dispositivo predeterminado, el cliente debe implementar el comportamiento de cambio de dispositivo cuando reciba la notificación a través de la devolución de llamada IMMNotificationClient::OnDefaultDeviceChanged .

Notificaciones de cambio de sesión de audio

Los cambios de sesión de audio y los cambios de formato se notifican como eventos de sesión de audio a través de WASAPI. Un cliente WASAPI implementa la interfaz IAudioSessionEvents y registra la implementación con WASAPI.

Para obtener notificaciones de cambio de sesión de audio, el cliente debe realizar las siguientes tareas:

WASAPI llama a los métodos IAudioSessionEvents cuando se producen cambios en la sesión de audio. Estos eventos se generan cuando cambia el nombre para mostrar de la sesión, la ruta de acceso del icono, el volumen, el parámetro de agrupación o el estado.

Para implementar la característica de enrutamiento de flujos, el cliente debe esperar a la notificación de desconexión de sesión. Cuando se desconecta una sesión de audio o se cambia el formato de un dispositivo, WASAPI envía las notificaciones de cliente en forma de devoluciones de llamada a través de IAudioSessionEvents::OnSessionDisconnected. Con la notificación de desconexión, WASAPI también envía un valor que indica por qué se desconectó la sesión. Esto puede ocurrir por varias razones, como el dispositivo se quitó, el servidor se detuvo, etc. Para obtener la lista completa de motivos, consulte la enumeración AudioSessionDisconnectReason definida en AudioPolicy.h. Si el dispositivo predeterminado cambia, el cliente debe esperar a las notificaciones (si aún no se han recibido) que están acompañadas de un valor DisconnectReasonDeviceRemoval . En respuesta a estas notificaciones, el cliente podría volver a abrir la secuencia en el nuevo dispositivo predeterminado.

Dado que todas estas operaciones son asincrónicas, el orden en que la aplicación recibe notificaciones no se puede predecir. Sin embargo, normalmente, la aplicación recibe el valor AudioSessionDisconnect antes de la notificación de cambio de dispositivo predeterminada.

Dar formato a las notificaciones de cambio

Los cambios de formato de audio se producen cuando cambia el formato de la secuencia. Esto puede ocurrir cuando el usuario selecciona un nuevo formato en el panel de control sonido o el nuevo dispositivo predeterminado admite un nuevo formato (por ejemplo, HDMI o determinadas interfaces de audio profesionales con un ajuste manual de frecuencia de muestreo). Para notificar al cliente estos tipos de cambios de formato, WASAPI envía una notificación de sesión por la implementación registrada de IAudioSessionEvents::OnSessionDisconnected con una razón de desconexión de DisconnectReasonFormatChanged. El cliente puede controlar la notificación si vuelve a abrir la secuencia en el nuevo formato.

Acerca de MMDevice API

Acerca de WASAPI

Enrutamiento de flujos