4

Vistaまたは7でオーディオセッション*の現在の音量レベルを取得する方法を知っている人はいますか?

ボリュームの変更をリッスンする必要があるIAudioSessionControl2インスタンスとIAudioSessionManager2インスタンスがありますが、実際に現在のボリュームを取得することは、とらえどころのないことを証明しています。

*オーディオセッションとは、「マスター」コントロールではなく、(おおよそ)アプリケーションごとのオーディオコントロールを意味します


(私が知る限り)IAudioSessionManager2-> GetSimpleVolume()はここでは正しい答えではないことに注意してください。IAudioSessionControl2でGUIDを公開するのは、グループ化パラメーターだけです。これをGetSimpleVolumeで使用すると、既存のセッションを制御するのではなく、新しいセッションが作成されます。

GetSimpleVolume()は私が欲しいものですが、このセットアップのパラメーターはどこから来ていますか?

4

2 に答える 2

3

実際に IAudioSessionManager::GetSimpleAudioVolume はあなたが探しているものです。

オーディオ セッションは、セッション GUID、プロセス ID、およびクロス プロセス フラグの 2 つ (または 3 つ) によって識別されます (ストリームの作成時にクロス プロセス フラグが指定されている場合、プロセス ID は無視されます)。

単純なオーディオ ボリュームは、そのオーディオ セッション内のすべてのストリームのボリュームを制御します。これはかなり簡単です (ほとんどのレンダリング フレームワークは、セッション GUID に NULL を指定します)。アプリケーションが特定のセッション GUID を使用している場合は、アプリケーションが使用しているセッション GUID を指定する必要があります。

ただし、もう 1 つのひねりがあります。ボリューム コントロール (sndvol.exe) は、すべてのセッションを同じ "グループ化パラメーター" で UI に結合します。これはボリューム コントロールの一部ではなく、IE などの Web ブラウザーにのみ存在する UI の便利な機能です。存在します。サード パーティのオーディオ フレームワーク (GUID_NULL セッション GUID を指定) と WMP OCX (特定のセッション GUID でクロス プロセス セッションを指定) がボリューム UI で単一のスライダーを共有できるようにします。

于 2009-07-18T16:43:06.800 に答える
1

ISimpleAudioVolumeインターフェースはあなたが必要とすることをするべきだと思います。
GetMasterVolume witchというメソッドがあり、オーディオセッションの音量を返します。
インターフェイスを取得するには、IAudioSessionManager::GetSimpleAudioVolumeを呼び出すことができます。

guidパラメーターには、IAudioClient::Initializeを使用してオーディオストリームを作成するときに指定したパラメーターを使用できます。セッションのGUIDを取得する他の方法があるかどうかは正直わかりません。

グループ化パラメータは、セッションが属するグループのIDであり、セッションのIDではありません。

于 2009-07-15T01:53:07.353 に答える