IAudioSessionControl2 接口 (audiopolicy.h)

客户端可以使用 IAudioSessionControl2 接口获取有关音频会话的信息。

若要获取对 IAudioSessionControl2 接口的引用,应用程序必须调用 IAudioSessionControl::QueryInterface ,以从流对象的 IAudioSessionControl 接口请求接口指针。 应用程序可以通过两种方式获取指向 IAudioSessionControl 接口的指针:

当应用程序想要释放 IAudioSessionControl2 接口实例时,应用程序必须从创建对象的 IAudioClient::GetService 调用同一线程调用接口的 Release 方法。

必须针对 COM 初始化使用此接口的应用程序线程。 有关 COM 初始化的详细信息,请参阅 Windows SDK 文档中 CoInitializeEx 函数的说明。

继承

IAudioSessionControl2 接口继承自 IAudioSessionControlIAudioSessionControl2 也具有以下类型的成员:

方法

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

另请参阅

核心音频接口

IAudioSessionControl

使用通信设备