IAudioSessionControl2 接口 (audiopolicy.h)
客户端可以使用 IAudioSessionControl2 接口获取有关音频会话的信息。
若要获取对 IAudioSessionControl2 接口的引用,应用程序必须调用 IAudioSessionControl::QueryInterface ,以从流对象的 IAudioSessionControl 接口请求接口指针。 应用程序可以通过两种方式获取指向 IAudioSessionControl 接口的指针:
- 在设备上打开流后,在音频客户端上调用 IAudioClient::GetService 。 音频客户端打开用于呈现或捕获的流,并通过调用 IAudioClient::Initialize 将其与音频会话相关联。
- 为现有音频会话调用 IAudioSessionManager::GetAudioSessionControl ,而无需打开流。
必须针对 COM 初始化使用此接口的应用程序线程。 有关 COM 初始化的详细信息,请参阅 Windows SDK 文档中 CoInitializeEx 函数的说明。
继承
IAudioSessionControl2 接口继承自 IAudioSessionControl。 IAudioSessionControl2 也具有以下类型的成员:
方法
IAudioSessionControl2 接口包含以下方法。
IAudioSessionControl2::GetProcessId GetProcessId 方法检索音频会话的进程标识符。 |
IAudioSessionControl2::GetSessionIdentifier GetSessionIdentifier 方法检索音频会话标识符。 |
IAudioSessionControl2::GetSessionInstanceIdentifier GetSessionInstanceIdentifier 方法检索音频会话实例的标识符。 |
IAudioSessionControl2::IsSystemSoundsSession IsSystemSoundsSession 方法指示会话是否为系统声音会话。 |
IAudioSessionControl2::SetDuckingPreference SetDuckingPreference 方法启用或禁用系统提供的自动躲避) (默认流衰减体验。 |
注解
此接口支持 流衰减 或 躲避的自定义实现,这是 Windows 7 中的一项新功能。 在默认通信设备上打开新的通信流时,播放媒体流的应用程序可能会使其行为不同。 例如,可以在打开新通信流时暂停原始媒体流。 有关此功能的详细信息,请参阅 默认躲避体验。
应用程序可以使用此接口执行以下任务:
- 指定它想要选择退出系统提供的默认流衰减体验。
- 获取与流关联的音频会话标识符。 通知注册期间需要标识符。 应用程序可以自行注册以接收来自系统的躲避通知。
- 检查与音频会话关联的流是否为系统声音。
示例
以下示例代码演示如何获取对 IAudioSessionControl2 接口的引用并调用其方法以确定与音频会话关联的流是否为系统声音。
HRESULT SetDuckingForSystemSounds()
{
HRESULT hr = S_OK;
IMMDevice* pDevice = NULL;
IMMDeviceEnumerator* pEnumerator = NULL;
IAudioSessionControl* pSessionControl = NULL;
IAudioSessionControl2* pSessionControl2 = NULL;
IAudioSessionManager* pSessionManager = NULL;
CHECK_HR( hr = CoInitialize(NULL));
// Create the device enumerator.
CHECK_HR( hr = CoCreateInstance(
__uuidof(MMDeviceEnumerator),
NULL, CLSCTX_ALL,
__uuidof(IMMDeviceEnumerator),
(void**)&pEnumerator));
// Get the default audio device.
CHECK_HR( hr = pEnumerator->GetDefaultAudioEndpoint(
eRender, eConsole, &pDevice));
// Get the audio client.
CHECK_HR( hr = pDevice->Activate(
__uuidof(IID_IAudioSessionManager), CLSCTX_ALL,
NULL, (void**)&pSessionManager));
// Get a reference to the session manager.
CHECK_HR( hr = pSessionManager->GetAudioSessionControl (GUID_NULL, FALSE, &pSessionControl));
// Get the extended session control interface pointer.
CHECK_HR( hr = pSessionControl->QueryInterface(
__uuidof(IAudioSessionControl2), (void**) &pSessionControl2));
// Check whether this is a system sound.
CHECK_HR( hr = pSessionControl2->IsSystemSoundsSession());
// If it is a system sound, opt out of the default
// stream attenuation experience.
CHECK_HR( hr = pSessionControl2->SetDuckingPreference(TRUE));
done:
// Clean up.
SAFE_RELEASE(pSessionControl2);
SAFE_RELEASE(pSessionControl);
SAFE_RELEASE(pEnumerator);
SAFE_RELEASE(pDevice);
return hr;
}
要求
要求 | 值 |
---|---|
最低受支持的客户端 | Windows 7 [仅限桌面应用] |
最低受支持的服务器 | Windows Server 2008 R2 [仅限桌面应用] |
目标平台 | Windows |
标头 | audiopolicy.h |