Sesiones de audio
Una sesión de audio es un grupo de secuencias de audio relacionadas que un cliente WASAPI puede administrar colectivamente. Los clientes pueden controlar el nivel de volumen y silenciar el estado de cada sesión individual. El sistema aplica el volumen especificado por el cliente y la configuración de silenciar uniformemente a todas las secuencias de la sesión.
Cuando un cliente inicializa una secuencia de audio, asigna la secuencia de audio a una sesión de audio. Para obtener más información, vea IAudioClient::Initialize.
Una sesión de audio contiene secuencias de representación o secuencias de captura, pero no ambas. De forma predeterminada, la configuración de volumen y silenciación de una sesión de representación es persistente en los reinicios del sistema. La configuración de volumen y silenciación de una sesión de captura no es persistente. (Una sesión que contiene secuencias que funcionan en modo de bucle invertido se trata igual que una sesión de captura. Es decir, la configuración de sesión no es persistente. Para obtener más información sobre el modo de bucle invertido, vea Grabación de bucle invertido).
Cada secuencia de audio pertenece exactamente a una sesión. Un cliente asigna una secuencia de audio a una sesión determinada en el momento en que inicializa el objeto de secuencia. La secuencia conserva su pertenencia a la sesión durante la vigencia de la secuencia. Una vez creado un objeto stream, el objeto existe hasta que un cliente libera la última referencia contada al objeto y, a continuación, se elimina el objeto .
Aunque un cliente no puede cambiar la sesión a la que se asigna una secuencia existente, puede lograr un efecto similar eliminando la secuencia (liberando todas las referencias a ella), creando una nueva secuencia para reemplazar la secuencia eliminada y asignando la nueva secuencia a otra sesión.
Cada sesión de representación representa un subconjunto de las secuencias que forman la combinación global que se reproduce a través de un dispositivo de punto de conexión de audio determinado. La combinación global combina todas las sesiones de todas las aplicaciones que comparten el dispositivo.
Con frecuencia, una aplicación con varias secuencias asigna todas sus secuencias a la misma sesión. Sin embargo, la aplicación puede, como opción, asignar secuencias diferentes a sesiones diferentes. Cualquier secuencia que la aplicación no asigne explícitamente a una sesión pertenece a la sesión predeterminada.
Las aplicaciones de audio típicas deben evitar modificar la configuración de volumen y silenciar para las sesiones. En su lugar, los usuarios controlan esta configuración a través de las interfaces de usuario de los programas de control. Por ejemplo, en Windows Vista, el programa proporcionado por el sistema, Sndvol.exe, muestra un control de volumen y un control silenciado para cada sesión de representación activa o recientemente activa en el sistema. A través de estos controles, los usuarios pueden ajustar la configuración de volumen y silenciar para todas las sesiones del sistema.
Actualmente, el programa Sndvol muestra controles de volumen para dispositivos de punto de conexión de representación de audio. No muestra controles de volumen para dispositivos de captura de audio.
Una sesión está activa si contiene una o varias secuencias activas. Una secuencia activa está en estado de ejecución. Una secuencia inactiva está en estado detenido. Una sesión se activa cuando su primera secuencia se activa. Una sesión se vuelve inactiva cuando su última secuencia activa se vuelve inactiva. Una vez inactiva una sesión durante un período de tiempo, el sistema cambia el estado de la sesión de inactivo a expirado.
Sndvol muestra controles de volumen y silenciación para todas las sesiones de representación activas e inactivas. Sndvol quita el volumen y silencia los controles de una sesión cuando el estado de la sesión cambia de inactivo a expirado, o cuando finaliza la sesión. (Una sesión finaliza cuando se elimina la última de sus secuencias; es decir, cuando un cliente libera el recuento de referencias final en el último objeto de secuencia restante de la sesión). La única excepción a esta regla es para los sonidos de notificación del sistema. Sndvol siempre muestra los controles de volumen y silenciar los sonidos de notificación del sistema, independientemente del estado de la sesión para estos sonidos.
Normalmente, una secuencia pertenece a una sesión que abarca solo el proceso que contiene la aplicación que creó la secuencia. Sin embargo, las aplicaciones tienen la opción de definir sesiones entre procesos que combinan secuencias de dos o más procesos.
WASAPI admite sesiones entre procesos principalmente para que:
- El programa Sndvol puede presentar al usuario un único control de volumen para administrar los sonidos de notificación del sistema en todas las aplicaciones.
- Un reproductor multimedia que se ejecuta en un proceso puede transmitir contenido protegido a un programa de descifrado que se ejecuta en otro proceso.
De forma similar a la configuración de control para sesiones de representación específicas del proceso, la configuración de control para las sesiones de representación entre procesos es, de forma predeterminada, persistente en los reinicios del sistema. WASAPI proporciona este comportamiento principalmente para la ventaja de los sonidos de notificación del sistema, que deben conservar el volumen del usuario y la configuración de silenciar a medida que la combinación de aplicaciones varía con el tiempo.
El programa Sndvol etiqueta el control de volumen de cada sesión con un nombre para mostrar y un icono. Un cliente tiene la opción de asignar explícitamente un nombre para mostrar y un icono a una sesión. Si el cliente no proporciona estos elementos, Sndvol muestra en su lugar un nombre predeterminado y un icono predeterminado. El nombre predeterminado incorpora información como el título de la ventana de la aplicación. El icono predeterminado es el icono de la ventana de la aplicación. Solo en el caso de sesiones específicas del proceso, estos valores predeterminados proporcionan información significativa a los usuarios. Tenga en cuenta que una sesión entre procesos se puede asociar a más de una aplicación. En este caso, solo un nombre para mostrar proporcionado por el cliente y un icono son significativos.
Aunque la configuración de volumen y silenciación de una sesión de representación es, de forma predeterminada, persistente en los reinicios del sistema, el nombre para mostrar y el icono proporcionados por el cliente no son. Para asegurarse de que Sndvol muestra el nombre y el icono proporcionados por el cliente, el cliente debe asignar explícitamente el nombre y el icono a la sesión en el momento en que el cliente asigna la primera secuencia a la sesión. El sistema conserva el nombre para mostrar y el icono de una sesión solo hasta que finaliza la sesión.
Cada sesión se identifica mediante un GUID de sesión. En el momento en que un cliente abre una secuencia, el cliente asigna esa secuencia a una sesión determinada. El cliente proporciona los dos fragmentos de información siguientes para identificar esa sesión:
- Un GUID de sesión.
- Si la sesión es una sesión entre procesos o específica del proceso, una sesión específica del proceso solo contiene secuencias del proceso del cliente.
Esta información es suficiente para distinguir una sesión determinada de todas las demás sesiones del mismo equipo. El GUID de sesión de una sesión específica del proceso identifica de forma única la sesión solo dentro del ámbito del proceso que posee la sesión. En cambio, el GUID de sesión de una sesión entre procesos es único dentro del ámbito de todos los procesos que se ejecutan en el equipo.
En el caso de una sesión específica del proceso, el sistema usa una combinación de GUID de sesión e identificador de proceso para identificar de forma única la sesión dentro del ámbito del equipo. Por lo tanto, si los clientes de dos procesos diferentes asignan sus secuencias respectivas a dos sesiones específicas del proceso con GUID de sesión idénticos, el sistema trata las sesiones como independientes porque sus identificadores de proceso son diferentes. Además, si una sesión entre procesos usa el mismo GUID de sesión que una o varias sesiones específicas del proceso, el sistema trata la sesión entre procesos como distinta de las sesiones específicas del proceso, aunque compartan el mismo GUID de sesión.
Por ejemplo, en Windows Vista, las API de nivel superior, como las funciones waveOutXxx multimedia de Windows y DirectSound, normalmente asignan las secuencias de audio que crean a sesiones predeterminadas específicas del proceso identificadas por el valor guid de sesión GUID_NULL. En el caso de los clientes de estas API, la sesión predeterminada para cada proceso de cliente es independiente de las sesiones predeterminadas para otros procesos de cliente, aunque las sesiones tienen GUID de sesión idénticos. Además, si una o varias aplicaciones asignan secuencias a la sesión entre procesos identificada por el valor guid de sesión GUID_NULL, el sistema trata esta sesión entre procesos como independiente de las sesiones predeterminadas específicas del proceso que comparten el mismo GUID de sesión. En consecuencia, el programa Sndvol muestra un control de volumen independiente para la sesión predeterminada de cada cliente, específica del proceso y muestra un control de volumen adicional para la sesión entre procesos identificada por el valor guid de sesión GUID_NULL, si existe esa sesión.
Cada sesión está asociada a un único dispositivo de punto de conexión de audio. Si dos sesiones tienen GUID de sesión idénticos e identificadores de proceso, pero están asociados a dispositivos diferentes, el sistema trata las dos sesiones como independientes. Una sesión nunca puede contener secuencias de captura y representación porque una secuencia de captura solo se puede asociar a un dispositivo de captura y una secuencia de representación solo se puede asociar a un dispositivo de representación.
Como se mencionó anteriormente, la configuración de volumen y silenciación de una sesión es persistente en los reinicios del sistema. Dos o más instancias de una aplicación pueden crear sesiones específicas del proceso con GUID de sesión idénticos. A través del programa Sndvol, el usuario puede seleccionar diferentes configuraciones de volumen y silenciar para cada una de estas sesiones. Una vez finalizadas estas sesiones, el sistema conserva la configuración de control de solo una de estas sesiones, la última sesión que se finalizará. Más adelante, si una nueva instancia de la aplicación crea una sesión específica del proceso con el mismo GUID de sesión que antes, esa sesión hereda el volumen guardado anteriormente y la configuración de silenciar.
Una aplicación no debe intentar agregar una secuencia o controlar el nivel de volumen de una sesión que pertenece a otra aplicación no relacionada. Además, una aplicación no debe intentar controlar el nivel de volumen de la sesión administrada por el sistema para los sonidos de notificación. Sin embargo, una aplicación puede reproducir un sonido a través de la sesión del sistema para los sonidos de notificación mediante una llamada a la función PlaySound . Para obtener más información, vea Notificaciones de sonidos para aplicaciones de audio heredadas.
Una aplicación puede registrarse para recibir notificaciones cuando cambia el estado de una sesión. Para obtener más información, vea Eventos de sesión de audio.
En raras ocasiones, una aplicación que crea una sesión específica del proceso podría necesitar consolidar el control de las sesiones específicas del proceso para dos o más instancias de aplicación en un único control de volumen en Sndvol. Para obtener más información, vea Agrupar parámetros.
Temas relacionados