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 接口的注册。

应用程序不得在事件回调期间注册或取消注册通知回调。

有关详细信息,请参阅 闪避通知的实现注意事项

示例

以下示例代码演示 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

另请参阅

核心音频接口

使用通信设备