EndpointVolume API
EndpointVolume API を使用すると、特殊なクライアントがオーディオ エンドポイント デバイスのボリューム レベルを制御および監視できます。 クライアントは、オーディオ エンドポイント デバイスの IMMDevice インターフェイスを取得し、IMMDevice::Activate メソッドを呼び出すことによって、EndpointVolume API 内のインターフェイスへの参照を取得します。
ヘッダー ファイル Endpointvolume.h は、EndpointVolume API のインターフェイスを定義します。
MMDevice API と WASAPI を使用するオーディオ アプリケーションでは通常、ISimpleAudioVolume インターフェイスを使用して、セッションごとにボリューム レベルを制御します。 EndpointVolume API を使用する必要があるのは、2 種類のオーディオ アプリケーションだけです。 これらのアプリケーションの種類には、次のようなものがあります。
- Windows ボリュームコントロール プログラムと同様、オーディオ エンドポイント デバイスのマスター ボリューム レベルを管理するアプリケーション Sndvol.exe。
- オーディオ エンドポイント デバイスへの排他モード アクセスを必要とするプロフェッショナル オーディオ ("プロ オーディオ") アプリケーション。
EndpointVolume API を不適切に使用すると、Windows オーディオ ポリシーに干渉し、ユーザーのシステム ボリューム設定が無効になる可能性があります。
オーディオ エンドポイント デバイスにハードウェア ボリュームとミュート コントロールが実装されている場合、EndpointVolume API はこれらのコントロールを使用してデバイス ボリュームを管理します。 それ以外の場合、EndpointVolume API は、ソフトウェアのコントロールをクライアントに透過的に実装します。
デバイスにハードウェア ボリュームとミュート コントロールがある場合、EndpointVolume API を通じてデバイスのボリュームとミュート設定に加えられた変更は、共有モードと排他モードの両方のボリューム レベルに影響を与えます。 デバイスにハードウェア ボリュームとミュート コントロールがない場合、EndpointVolume API を通じてソフトウェア ボリュームとミュート コントロールに加えられた変更は、共有モードのボリューム レベルに影響を与えますが、排他モードでは影響を与えません。 排他モードでは、クライアントとデバイスはオーディオ データを直接交換し、ソフトウェア コントロールをバイパスします。
ハードウェア ボリュームとミュート コントロールを管理する必要があるアプリケーションの場合、DeviceTopology API と比べて、EndpointVolume API には 2 つの潜在的なメリットがあります。
まず、多くのオーディオ アダプター デバイスには、ハードウェア ボリュームコントロールがありません。 デバイスにハードウェア ボリューム コントロールがない場合、EndpointVolume API の IAudioEndpointVolume インターフェイスは、そのデバイスとの間のストリームにソフトウェア ボリューム コントロールを自動的に実装します。 EndpointVolume API のクライアントの場合、ボリューム コントロールがデバイスによってハードウェアに実装されているか、EndpointVolume API インターフェイスによってソフトウェアに実装されているかに関係なく、結果は同じです。
2 つ目は、アダプター デバイスがハードウェア ボリューム コントロールを実装している場合でも、DeviceTopology API を使用してトポロジ トラバーサル アルゴリズムを実装するアプリケーションが、目的のコントロールを見つけることができない可能性があります。 通常、そのようなアプリケーションは、特定のデバイスまたは関連デバイスのセットのハードウェア トポロジを走査するよう設計されています。 アプリケーションは、特に設計またはテストされていないデバイスのトポロジを走査しようとすると、失敗するリスクがあります。
ボリューム コントロールとミュート コントロール以外のハードウェア機能にアクセスする必要がある特殊なアプリケーションにのみ、DeviceTopology API を使用する必要があります。 排他モード ストリームのボリューム レベルのみを制御する必要があるアプリケーションの場合、EndpointVolume API は使いやすく、より広い範囲のオーディオ ハードウェア デバイスで確実に機能します。
EndpointVolume API のインターフェイスを使用するコード例については、以下のトピックをご覧ください。
EndpointVolume API を使用するサンプルについては、Windows SDK の「EndpointVolume」をご覧ください。
EndpointVolume API は、次のインターフェイスを実装します。
Interface | 説明 |
---|---|
IAudioEndpointVolume | オーディオ エンドポイント デバイス間のオーディオ ストリーム上のボリューム コントロールを表します。 |
IAudioMeterInformation | オーディオ エンドポイント デバイス間のオーディオ ストリームのピーク メーターを表します。 |
加えて、ボリュームの通知とオーディオ エンドポイント デバイスにおける変更のミュートを必要とする EndpointVolume API のクライアントは、次のインターフェイスを実装する必要があります。
Interface | 説明 |
---|---|
IAudioEndpointVolumeCallback | オーディオ エンドポイント デバイスのボリューム レベルまたはミュート状態が変更されたときに通知を提供します。 |
関連トピック