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 |