IAudioSessionControl2 インターフェイス (audiopolicy.h)
IAudioSessionControl2 インターフェイスは、クライアントがオーディオ セッションに関する情報を取得するために使用できます。
IAudioSessionControl2 インターフェイスへの参照を取得するには、アプリケーションで IAudioSessionControl::QueryInterface を呼び出して、ストリーム オブジェクトの IAudioSessionControl インターフェイスからインターフェイス ポインターを要求する必要があります。 アプリケーションが IAudioSessionControl インターフェイスへのポインターを取得するには、次の 2 つの方法があります。
- デバイスでストリームを開いた後、オーディオ クライアントで 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 |