私は現在、オーディオセッションに取り組んでいます。GetSessionEnumerator と GetSession を使用してすべてのセッションを列挙することによって取得されたオーディオ セッションがあるとします。RegisterAudioSessionNotification を使用して、セッションの音量が変更されたとき、状態が変更されたときなどを知る通知を登録することができます。
ただし、セッションがいつ削除されたかを知る方法が見つかりませんでした。ドキュメントによると、API によって提供されるセッション有効期限メカニズムはありません。
その情報を念頭に置いて、私が理解できない2つの動作があります。
Windows のボリューム ミキサー (sndvol) で、サウンドを生成しているアプリケーションを終了すると、それに関連付けられているアイコンとボリューム スライダーがリストから消えます。期限切れメカニズムがないため、sndvol はどのようにしてこれを認識しますか?
シナリオは次のとおりです。
を。n 個のオーディオ セッションがアクティブになっています
b. これらのセッションを列挙し、新しいセッションをリッスンします
c. サウンドを生成するアプリを起動すると、セッション作成通知が起動し、リストに n+1 セッションが表示されます
d. アプリを終了します。有効期限メカニズムがないため、まだ n+1 個の通知があります
e. 理解できないこと: オーディオ セッションを再列挙すると、n 個のセッションが取得されます。再列挙したときにリストにイベントがない場合、終了したアプリの余分なセッションがまだ機能しているのはなぜですか? また、なぜリストから消えたのですか?
誰か情報を持っていますか?結果なしで何週間も探していました!
どうもありがとうございました!
編集:sndvol を少し調べたところ、興味深いインターフェイスが見つかりました: {604e2ae7-c4c5-4032-93ff-88b26cdd75b8}。sndvol は、IAudioSessionControl からすべてのセッションに対してクエリを実行します。明らかに、これはドキュメントのないプライベート インターフェイスです。興味深いことに、そのクエリが失敗した場合、セッションは sndvol に表示されません! こちらで確認できたようです
そのインターフェースに関するこれ以上の情報は見つかりませんでした。