2

Windows オーディオ セッション API を使用して、現在のオーディオ セッションの列挙内で既定のオーディオ セッションを見つけようとしています。現在、ロールIAudioSessionControl内のオーディオ レンダー エンドポイントのデフォルト セッションと、このデフォルト エンドポイントのオーディオ セッションを列挙するオブジェクトへの参照を持っていますが、私が持っているオブジェクトと等しいかどうかを比較できるようにする必要があります。によって返されるオブジェクト。eConsoleIAudioSessionEnumeratorIAudioSessionControlIAudioSessionControlIAudioSessionEnumerator::GetSession

IAudioSessionControlポインターが等しいかどうかを比較することで、等しいかどうかをテストできることを望んでいました。これは、 をIAudioSessionControl使用してデフォルト セッションの を複数回取得した場合に機能しますIAudioClient::GetService。残念ながら、 によって返されるこのポインタは、 によるIAudioClient::GetServiceオーディオ セッションの列挙には表示されませんIAudioSessionEnumerator。また、同じオーディオ セッション GUID ( ) と値を使用している場合でも、ルートを介して既定のオーディオ セッションを複数回取得しても、同じポインターIAudioSessionManager::GetAudioSessionControlは得られません。IAudioSessionControlGUID_NULLCrossProcessSession

IAudioSessionControl2 つのポインタを指定してオーディオ セッションが等しいかどうかをテストするにはどうすればよいですか? 特定のオブジェクトのオーディオ セッション GUID とプロセス識別子を取得することはできIAudioSessionControlますか?

4

2 に答える 2

2

IAudioSessionControl2::GetSessionIdentifier API を見てください。これは、オーディオ サブシステムがセッション ボリュームを保持するために使用するものです。実行時にセッションを区別したい場合 (同じアプリの 2 つのインスタンスが同時に実行されている場合) は、GetSessionInstanceIdentifier API を確認してください。

于 2011-05-23T13:56:34.937 に答える
1

ここで COM が支援できる唯一のことは、オブジェクト ID の要件です

両方のオブジェクトからクエリを実行IUnknown*し、それらを比較します。これらのオブジェクトが同じである場合IUnknown*、それは同じオブジェクトであり、そうでない場合、それらは別個のオブジェクトです。

もちろん、実装がオブジェクト ID の要件に違反したり、それらの個別のオブジェクトが何らかの方法で同じ内部オブジェクトにマップされたりする可能性があります。ここでは、COM は役に立ちません。そのコンポーネントの実装に固有の情報を見つける必要があります。

于 2011-05-23T05:40:14.703 に答える