ボリューム コントロール
共有モード ストリームを管理するクライアントは、通常、WASAPI の ISimpleAudioVolume および IAudioSessionEvents インターフェイスを使用して、ストリーム ボリューム レベルを制御および監視します。 クライアントは、ISimpleAudioVolume インターフェイスのメソッドを使用することで、共有モード ストリームが属するオーディオ セッションのボリューム レベルを取得および設定できます。 Sndvol または別のアプリケーションがセッション ボリューム レベルを変更した場合、クライアントは IAudioSessionEvents インターフェイスを介して変更の通知を受け取ることができます。
排他モード ストリームを管理するクライアントは、通常、EndpointVolume API の IAudioEndpointVolume インターフェイスと IAudioEndpointVolumeCallback インターフェイスを使用して、ストリーム ボリューム レベルを制御および監視します。 クライアントは、IAudioEndpointVolume インターフェイスのメソッドを使用して、オーディオ エンドポイント デバイスのボリューム レベルを取得および設定できます。 Sndvol または別のアプリケーションがエンドポイント デバイスのボリューム レベルを変更した場合、クライアントは IAudioEndpointVolumeCallback インターフェイスを介して変更の通知を受け取ることができます。
「オーディオ セッション」で説明されているように、Sndvol はシステム ボリュームコントロール プログラムです。 これによって、システム内のオーディオ レンダリング エンドポイント デバイスのボリューム コントロールが表示されます。 (現時点では、オーディオ キャプチャ エンドポイント デバイスのボリューム コントロールは表示されません。) 特定のデバイスのボリューム コントロールを表示するには、メニュー バーの [デバイス] をクリックし、使用可能なデバイスの一覧からデバイス名を選択します。
Sndvol ウィンドウは、デバイスのボリューム コントロールを 2 つのグループに分けます。 ウィンドウの左側にあるグループ ボックスには、デバイスというラベルが付けられます。 [デバイス] ボックスには、IAudioEndpointVolume インターフェイスによって制御される単一のボリューム コントロールが含まれています。 ユーザーがこのボリューム コントロールに対して行った変更は、IAudioEndpointVolumeCallback インターフェイスを使用して監視することができます。
Sndvol ウィンドウの右側にあるグループ ボックスには、アプリケーションというラベルが付けられます。 [アプリケーション] ボックスには、現在デバイスを共有しているアプリケーションのボリューム コントロールが表示されます。 デバイスを共有モードで使用するアプリケーションの場合、ボリューム コントロールは ISimpleAudioVolume インターフェイスによって制御されるボリューム レベルを表しています。 ユーザーがこれらのボリューム コントロールに加えた変更は、IAudioSessionEvents インターフェイスを介して監視することができます。
共有モード アプリケーションでは、その IAudioSessionEvents インターフェイスを使用して、ユーザーが Sndvol ウィンドウの [アプリケーション] ボックスでアプリケーションのボリューム コントロールに加える変更を監視できますが、アプリケーションは、関連のない他のアプリケーションのボリューム コントロールへの変更を監視することはできません。 同様に、アプリケーションは ISimpleAudioVolume インターフェイスを介してオーディオ セッションのボリューム レベルを変更できますが、関連のない他のアプリケーションに属するセッションのボリューム レベルを変更することはできません。
ただし、2 つ以上の関連するアプリケーション (または同じアプリケーションのインスタンス) は、同じプロセス間セッションにオーディオ ストリームを割り当てるか、それぞれのセッションを同じグループ化パラメーターに関連付けることによって、Sndvol ウィンドウの [アプリケーション] ボックスで同じボリューム コントロールを共有できます。 詳細については、「オーディオ セッション」と「グループ化パラメーター」を参照してください。
WASAPI には、共有モード ストリームのボリューム レベルを制御するための 2 つの追加インターフェイス、IChannelAudioVolume と IAudioStreamVolume が用意されています。 これらのインターフェイスは、セッション内の個々のチャネルまたはセッション内の個々のストリームのボリューム レベルを制御する必要がある特殊なクライアントによって、主に使用されます。
DeviceTopology API を使用すると、クライアントはオーディオ アダプターのトポロジ内のボリューム コントロールにアクセスすることができます。 ただし、排他モード ストリームを管理するクライアントは、通常、DeviceTopology API の代わりに EndpointVolume API を使用して、ストリーム ボリューム レベルを制御します。 EndpointVolume API は、エンドポイント デバイスのボリュームの制御を 2 つの方法で簡略化します。 まず、エンドポイント デバイスがハードウェア ボリューム コントロールを実装する場合、DeviceTopology API では、クライアントがハードウェア コントロールを検索してデバイス トポロジを走査する必要があります。 これに対し、EndpointVolume API は、クライアントのハードウェア ボリューム コントロールを自動的に検索します。 次に、エンドポイント デバイスがハードウェア ボリューム コントロールを実装していない場合、DeviceTopology クライアントはソフトウェアにボリューム コントロールを実装する必要があります。 これに対し、EndpointVolume API は、不足しているハードウェア コントロールの代わりにソフトウェア ボリューム コントロールを自動的に代用します。
次のセクションでは、オーディオ セッションとオーディオ エンドポイント デバイスのボリューム コントロールについて説明します。
関連トピック