IAudioVolumeDuckNotification 인터페이스(audiopolicy.h)

IAudioVolumeDuckNotification 인터페이스는 시스템에서 스트림 감쇠 변경에 대한 알림을 보내는 데 사용됩니다. Stream 감쇠 또는 더킹은 Windows 7에서 도입된 기능으로, 새 통신 스트림이 열릴 때 시스템이 비 통신 스트림의 볼륨을 조정합니다. 이 기능에 대한 자세한 내용은 기본 더킹 환경을 참조하세요.

상속

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

메서드

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

 
IAudioVolumeDuckNotification::OnVolumeDuckNotification

OnVolumeDuckNotification 메서드는 보류 중인 시스템 더킹 이벤트에 대한 알림을 보냅니다.
IAudioVolumeDuckNotification::OnVolumeUnduckNotification

OnVolumeUnduckNotification 메서드는 보류 중인 시스템 언덕트 이벤트에 대한 알림을 보냅니다.

설명

애플리케이션이 시스템에서 제공하는 시스템 감쇠 환경을 옵트아웃해야 하는 경우 IAudioSessionControl2::SetDuckingPreference 를 호출하고 해당 기본 설정을 지정해야 합니다.

WASAPI 시스템 구성 요소에 의해 구현되는 다른 WASAPI 인터페이스와 달리 IAudioVolumeDuckNotification 인터페이스는 사용자 지정 스트림 감쇠 동작을 제공하기 위해 애플리케이션에 의해 구현됩니다. 이벤트 알림을 수신하기 위해 애플리케이션은 IAudioSessionManager2::RegisterDuckNotification 메서드에 애플리케이션의 IAudioVolumeDuckNotification 구현에 대한 포인터를 전달합니다.

애플리케이션이 IAudioVolumeDuckNotification 인터페이스를 등록한 후 세션 관리자는 더킹 알림을 보내야 할 때 IAudioVolumeDuckNotification 구현을 호출합니다. 애플리케이션은 인터페이스의 메서드를 통해 콜백 형식으로 이벤트 알림을 받습니다.

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

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

자세한 내용은 Ducking 알림에 대한 구현 고려 사항을 참조하세요.

예제

다음 예제 코드는 IAudioVolumeDuckNotification 인터페이스의 샘플 구현을 보여줍니다.



class CDuckNotification : public IAudioVolumeDuckNotification
{
    LONG            _Cref;
    HWND            m_hwndMain;

    CDuckNotification (HWND hWnd) : 
        _Cref(1), 
        m_hwndMain (hWnd)
							 {}

    
    HRESULT OnVolumeDuckNotification (LPCWSTR SessionID, UINT32 CommunicationSessionCount)
    {
         PostMessage(m_hwndMain, WM_VOLUME_DUCK, 0, 0);
         return S_OK;
    }
    HRESULT OnVolumeUnduckNotification (LPCWSTR SessionID)
    {
         PostMessage(m_hwndMain, WM_VOLUME_UNDUCK, 0, 0);
         return S_OK;
    }

protected:
    ~CDuckNotification() {}

public:
    HRESULT QueryInterface (REFIID Iid, void** ReturnValue)
    {
        if (ReturnValue == NULL)
        {
            return E_POINTER;
        }
        *ReturnValue = NULL;
        if (iid == IID_IUnknown)
        {
            *ReturnValue = static_cast<IUnknown *>(static_cast<IAudioVolumeDuckNotification *>(this));
            AddRef();
        }
        else if (iid == __uuidof(IAudioVolumeDuckNotification))
        {
            *ReturnValue = static_cast<IAudioVolumeDuckNotification *>(this);
            AddRef();
        }
        else
        {
            return E_NOINTERFACE;
        }
        return S_OK;
    }
    ULONG AddRef()
    {
        return InterlockedIncrement(&_Cref);
    }

    ULONG Release()
    {
        LONG ref = InterlockedDecrement(&_Cref);
        if (ref == 0)
        {
            delete this;
        }
        return 0;
    }
};

요구 사항

요구 사항
지원되는 최소 클라이언트 Windows 7 [데스크톱 앱만 해당]
지원되는 최소 서버 Windows Server 2008 R2 [데스크톱 앱만 해당]
대상 플랫폼 Windows
헤더 audiopolicy.h

추가 정보

핵심 오디오 인터페이스

통신 디바이스 사용