Interfaz IAudioSessionEnumerator (audiopolicy.h)

La interfaz IAudioSessionEnumerator enumera las sesiones de audio en un dispositivo de audio. Para obtener una referencia a la interfaz IAudioSessionEnumerator del objeto enumerador de sesión, la aplicación debe llamar a IAudioSessionManager2::GetSessionEnumerator.

Herencia

La interfaz IAudioSessionEnumerator hereda de la interfaz IUnknown . IAudioSessionEnumerator también tiene estos tipos de miembros:

Métodos

La interfaz IAudioSessionEnumerator tiene estos métodos.

 
IAudioSessionEnumerator::GetCount

El método GetCount obtiene el número total de sesiones de audio abiertas en el dispositivo de audio.
IAudioSessionEnumerator::GetSession

El método GetSession obtiene la sesión de audio especificada por un número de sesión de audio.

Comentarios

Si una aplicación quiere recibir una notificación cuando se crean nuevas sesiones, debe registrar su implementación de IAudioSessionNotification con el administrador de sesiones. Tras el registro correcto, el administrador de sesiones envía notificaciones de creación de sesión a la aplicación en forma de devoluciones de llamada. Estas notificaciones contienen una referencia al puntero IAudioSessionControl de la sesión recién creada.

El enumerador de sesión mantiene una lista de sesiones actuales manteniendo referencias al puntero IAudioSessionControl de cada sesión. Sin embargo, es posible que el enumerador de sesión no tenga en cuenta las nuevas sesiones que se notifican a través de IAudioSessionNotification. En ese caso, la aplicación tendría acceso solo a una lista parcial de sesiones. Esto puede ocurrir si el puntero IAudioSessionControl (en la devolución de llamada) se libera antes de que se inicialice el enumerador de sesión. Por lo tanto, si una aplicación quiere un conjunto completo de sesiones para el punto de conexión de audio, la aplicación debe mantener su propia lista.

La aplicación debe realizar los pasos siguientes para recibir notificaciones de sesión y administrar una lista de sesiones actuales.

  1. Inicialice COM con el modelo de apartamento multiproceso (MTA) llamando a CoInitializeEx(NULL, COINIT_MULTITHREADED) en un subproceso que no sea de interfaz de usuario. Si MTA no se inicializa, la aplicación no recibe notificaciones de sesión del administrador de sesiones.
    Nota Los subprocesos que ejecutan la interfaz de usuario de una aplicación deben inicializarse con el modelo de subprocesos de apartamento.
     
  2. Active una interfaz IAudioSessionManager2 desde el dispositivo de punto de conexión de audio. Llame a IMMDevice::Activate con el parámetro iid establecido en IID_IAudioSessionManager2. Esta llamada recibe una referencia a la interfaz IAudioSessionManager2 del administrador de sesiones en el parámetro ppInterface .
  3. Implemente la interfaz IAudioSessionNotification para proporcionar el comportamiento de devolución de llamada.
  4. Llame a IAudioSessionManager2::RegisterSessionNotification para registrar la implementación de la aplicación de IAudioSessionNotification.
  5. Cree e inicialice el objeto enumerador de sesión llamando a IAudioSessionManager2::GetSessionEnumerator. Este método genera una lista de las sesiones actuales disponibles para el punto de conexión y agrega los punteros IAudioSessionControl para cada sesión de la lista, si aún no están presentes.
  6. Use la interfaz IAudioSessionEnumerator devuelta en el paso anterior para recuperar y enumerar la lista de sesiones. El control de sesión de cada sesión se puede recuperar llamando a IAudioSessionEnumerator::GetSession. Asegúrese de llamar a AddRef para cada control de sesión para mantener el recuento de referencias.
  7. Cuando la aplicación obtiene una notificación de creación de sesión, agregue el puntero IAudioSessionControl de la nueva sesión (recibida en IAudioSessionNotification::OnSessionCreated) a la lista de sesiones existentes.
Dado que la aplicación mantiene esta lista de sesiones y administra la duración de la sesión en función de los requisitos de la aplicación, el sistema de audio no aplica ningún mecanismo de expiración en los objetos de control de sesión.

Un control de sesión es válido siempre que la aplicación tenga una referencia al control de sesión de la lista.

Ejemplos

En el código de ejemplo siguiente se muestra cómo crear el objeto enumerador de sesión y, a continuación, enumerar sesiones.

HRESULT EnumSessions(IAudioSessionManager2* pSessionManager)
{
    if (!pSessionManager)
    {
        return E_INVALIDARG;
    }

    HRESULT hr = S_OK;
    
    int cbSessionCount = 0;
    LPWSTR pswSession = NULL;
    
    IAudioSessionEnumerator* pSessionList = NULL;
    IAudioSessionControl* pSessionControl = NULL;
    
    // Get the current list of sessions.
    CHECK_HR( hr = pSessionManager->GetSessionEnumerator(&pSessionList));
    
    // Get the session count.
    CHECK_HR( hr = pSessionList->GetCount(&cbSessionCount));

    for (int index = 0 ; index < cbSessionCount ; index++)
    {
        CoTaskMemFree(pswSession);
        SAFE_RELEASE(pSessionControl);
        
        // Get the <n>th session.
        CHECK_HR(hr = pSessionList->GetSession(index, &pSessionControl));

        CHECK_HR(hr = pSessionControl->GetDisplayName(&pswSession));

        wprintf_s(L"Session Name: %s\n", pswSession);
    }

done:
    CoTaskMemFree(pswSession);
    SAFE_RELEASE(pSessionControl);
    SAFE_RELEASE(pSessionList);

    return hr;

}

Requisitos

   
Cliente mínimo compatible Windows 7 [solo aplicaciones de escritorio]
Servidor mínimo compatible Windows Server 2008 R2 [solo aplicaciones de escritorio]
Plataforma de destino Windows
Encabezado audiopolicy.h

Consulte también

Interfaces de audio principales