EndpointVolume API
EndpointVolume API を使用すると、特殊なクライアントは、オーディオ エンドポイント デバイスのボリューム レベルを制御および監視できます。 クライアントは、オーディオ エンドポイント デバイスの IMMDevice インターフェイスを取得し、IMMDevice::Activate メソッドを呼び出すことによって、EndpointVolume API 内のインターフェイスへの参照を取得します。
ヘッダー ファイル Endpointvolume.h は、EndpointVolume API のインターフェイスを定義します。
MMDevice API と WASAPI を使用するオーディオ アプリケーション、通常、ISimpleAudioVolume インターフェイスを使用してセッションごとにボリューム レベルを制御します。 EndpointVolume API を使用する必要があるのは、2 種類のオーディオ アプリケーションだけです。 これらのアプリケーションの種類は次のとおりです。
- Windows ボリュームコントロール プログラムと同様に、オーディオ エンドポイント デバイスのマスター ボリューム レベルを管理するアプリケーション Sndvol.exe。
- オーディオ エンドポイント デバイスへの排他モード アクセスを必要とするプロフェッショナル オーディオ ("pro audio") アプリケーション。
EndpointVolume API を不適切に使用すると、Windows オーディオ ポリシーが妨げられる可能性があり、ユーザーのシステム ボリューム設定が中断される可能性があります。
オーディオ エンドポイント デバイスがハードウェア ボリュームとミュート コントロールを実装している場合、EndpointVolume API はこれらのコントロールを使用してデバイス ボリュームを管理します。 それ以外の場合、EndpointVolume API はソフトウェアのコントロールをクライアントに透過的に実装します。
デバイスにハードウェア ボリュームとミュート コントロールがある場合、EndpointVolume API を介してデバイスのボリュームとミュート設定に加えられた変更は、共有モードと排他モードの両方のボリューム レベルに影響します。 デバイスにハードウェア ボリュームとミュート コントロールがない場合、EndpointVolume API を介してソフトウェア ボリュームとミュート コントロールに加えられた変更は、共有モードのボリューム レベルに影響しますが、排他モードでは影響しません。 排他モードでは、クライアントとデバイスはオーディオ データを直接交換し、ソフトウェア コントロールをバイパスします。
ハードウェア ボリュームとミュート コントロールを管理する必要があるアプリケーションの場合、EndpointVolume API は、DeviceTopology 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 は、次のインターフェイスを実装します。
インターフェイス | 形容 |
---|---|
IAudioEndpointVolumeの | オーディオ エンドポイント デバイス間のオーディオ ストリーム上のボリューム コントロールを表します。 |
IAudioMeterInformationの | オーディオ エンドポイント デバイス間のオーディオ ストリームのピーク メーターを表します。 |
さらに、ボリュームの通知とオーディオ エンドポイント デバイスでの変更のミュートを必要とする EndpointVolume API のクライアントは、次のインターフェイスを実装する必要があります。
インターフェイス | 形容 |
---|---|
IAudioEndpointVolumeCallbackの | オーディオ エンドポイント デバイスのボリューム レベルまたはミュート状態が変更されたときに通知を提供します。 |
関連トピック