다음을 통해 공유


IAudioSessionNotification 인터페이스(audiopolicy.h)

IAudioSessionNotification 인터페이스는 오디오 세션을 만들 때 알림을 제공합니다.

상속

IAudioSessionNotification 인터페이스는 IUnknown 인터페이스에서 상속됩니다. IAudioSessionNotification 에는 다음과 같은 유형의 멤버도 있습니다.

메서드

IAudioSessionNotification 인터페이스에는 이러한 메서드가 있습니다.

 
IAudioSessionNotification::OnSessionCreated

OnSessionCreated 메서드는 등록된 프로세스에 오디오 세션이 생성되었음을 알 수 있습니다.

설명

WASAPI 시스템 구성 요소에 의해 구현되는 다른 WASAPI 인터페이스와 달리 IAudioSessionNotification 인터페이스는 애플리케이션에서 구현됩니다. 이벤트 알림을 수신하기 위해 애플리케이션은 IAudioSessionManager2::RegisterSessionNotification 메서드에 해당 IAudioSessionNotification 구현에 대한 포인터를 전달합니다.

IAudioSessionNotification 인터페이스를 등록한 후 애플리케이션은 인터페이스의 메서드를 통해 콜백 형식으로 이벤트 알림을 받습니다.

애플리케이션이 더 이상 알림을 받을 필요가 없는 경우 IAudioSessionManager2::UnregisterSessionNotification 메서드를 호출합니다. 이 메서드는 애플리케이션이 이전에 등록한 IAudioSessionNotification 인터페이스의 등록을 제거합니다.

애플리케이션은 이벤트 콜백 중에 알림 콜백을 등록하거나 등록 취소해서는 안 됩니다.

세션 열거자는 IAudioSessionNotification을 통해 보고되는 새 세션을 인식하지 못할 수 있습니다. 따라서 애플리케이션이 오디오 엔드포인트에 대한 모든 세션을 가져오기 위해 세션 열거자를 단독으로 사용하는 경우 결과가 정확하지 않을 수 있습니다. 이 작업을 수행하려면 애플리케이션에서 목록을 수동으로 유지 관리해야 합니다. 자세한 내용은 IAudioSessionEnumerator를 참조하세요.

참고 애플리케이션이 UI가 아닌 스레드에서 를 호출 CoInitializeEx(NULL, COINIT_MULTITHREADED) 하여 MTA(다중 스레드 아파트) 모델을 사용하여 COM을 초기화해야 합니다. 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
헤더 audiopolicy.h

추가 정보

핵심 오디오 인터페이스