次の方法で共有


IAudioSessionControl2 インターフェイス (audiopolicy.h)

IAudioSessionControl2 インターフェイスは、クライアントがオーディオ セッションに関する情報を取得するために使用できます。

IAudioSessionControl2 インターフェイスへの参照を取得するには、アプリケーションで IAudioSessionControl::QueryInterface を呼び出して、ストリーム オブジェクトの IAudioSessionControl インターフェイスからインターフェイス ポインターを要求する必要があります。 アプリケーションが IAudioSessionControl インターフェイスへのポインターを取得するには、次の 2 つの方法があります。

  • デバイスでストリームを開いた後、オーディオ クライアントで IAudioClient::GetService を呼び出します。 オーディオ クライアントは、レンダリングまたはキャプチャ用のストリームを開き、 IAudioClient::Initialize を呼び出してオーディオ セッションに関連付けます。
  • ストリームを開かずに既存のオーディオ セッションに対 して IAudioSessionManager::GetAudioSessionControl を呼び出す。
アプリケーションが IAudioSessionControl2 インターフェイス インスタンスを解放する場合、アプリケーションは、オブジェクトを作成した IAudioClient::GetService の呼び出しと同じスレッドからインターフェイスの Release メソッドを呼び出す必要があります。

このインターフェイスを使用するアプリケーション スレッドは、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

こちらもご覧ください

コア オーディオ インターフェイス

IAudioSessionControl

通信デバイスの使用