Поделиться через


Интерфейс IAudioSessionNotification (audiopolicy.h)

Интерфейс IAudioSessionNotification предоставляет уведомление при создании звукового сеанса.

Наследование

Интерфейс IAudioSessionNotification наследуется от интерфейса IUnknown . IAudioSessionNotification также имеет следующие типы элементов:

Методы

Интерфейс IAudioSessionNotification имеет следующие методы.

 
IAudioSessionNotification::OnSessionCreated

Метод OnSessionCreated уведомляет зарегистрированные процессы о создании звукового сеанса.

Комментарии

В отличие от других интерфейсов WASAPI, которые реализуются системным компонентом WASAPI, интерфейс IAudioSessionNotification реализуется приложением. Для получения уведомлений о событиях приложение передает методу IAudioSessionManager2::RegisterSessionNotification указатель на реализацию IAudioSessionNotification .

После регистрации интерфейса IAudioSessionNotification приложение получает уведомления о событиях в виде обратных вызовов с помощью методов в интерфейсе .

Если приложению больше не нужно получать уведомления, оно вызывает метод IAudioSessionManager2::UnregisterSessionNotification . Этот метод удаляет регистрацию интерфейса IAudioSessionNotification , зарегистрированного приложением ранее.

Приложение не должно регистрировать или отменять регистрацию обратных вызовов уведомлений во время обратного вызова события.

Перечислитель сеансов может не знать о новых сеансах, которые передаются через IAudioSessionNotification. Таким образом, если приложение использует исключительно перечислитель сеансов для получения всех сеансов для конечной точки звука, результаты могут быть не точными. Чтобы обойти эту проблему, приложение должно вручную поддерживать список. Дополнительные сведения см. в разделе IAudioSessionEnumerator.

Примечание Убедитесь, что приложение инициализирует COM с моделью многопоточных квартир (MTA), вызывая CoInitializeEx(NULL, COINIT_MULTITHREADED) в потоке, отличном от пользовательского интерфейса. Если MTA не инициализирован, приложение не получает уведомления о сеансе от диспетчера сеансов. Потоки, запускающие пользовательский интерфейс приложения, должны быть инициализированы моделью потоков подразделения.
 

Примеры

В следующем примере кода показан пример реализации интерфейса IAudioSessionNotification .

class CSessionNotifications: public IAudioSessionNotification
{
private:

    LONG             m_cRefAll;
    HWND m_hwndMain;

    ~CSessionManager(){};

public:


    CSessionManager(HWND hWnd): 
    m_cRefAll(1),
    m_hwndMain (hWnd)

    {}

    // IUnknown
    HRESULT STDMETHODCALLTYPE QueryInterface(REFIID riid, void **ppv)  
    {    
        if (IID_IUnknown == riid)
        {
            AddRef();
            *ppvInterface = (IUnknown*)this;
        }
        else if (__uuidof(IAudioSessionNotification) == riid)
        {
            AddRef();
            *ppvInterface = (IAudioSessionNotification*)this;
        }
        else
        {
            *ppvInterface = NULL;
            return E_NOINTERFACE;
        }
        return S_OK;
    }
    
    ULONG STDMETHODCALLTYPE AddRef()
    {
        return InterlockedIncrement(&m_cRefAll);
    }
     
    ULONG STDMETHODCALLTYPE Release)()
    {
        ULONG ulRef = InterlockedDecrement(&m_cRefAll);
        if (0 == ulRef)
        {
            delete this;
        }
        return ulRef;
    }

    HRESULT OnSessionCreated(IAudioSessionControl *pNewSession)
    {
        if (pNewSession)
        {
            PostMessage(m_hwndMain, WM_SESSION_CREATED, 0, 0);
        }
    }
};

Требования

Требование Значение
Минимальная версия клиента Windows 7 [только классические приложения]
Минимальная версия сервера Windows Server 2008 R2 [только классические приложения]
Целевая платформа Windows
Header audiopolicy.h

См. также раздел

Основные звуковые интерфейсы