IAudioEndpointVolume インターフェイス (endpointvolume.h)
IAudioEndpointVolume インターフェイスは、オーディオ エンドポイント デバイス間のオーディオ ストリーム上のボリューム コントロールを表します。 クライアントは、パラメーター iid が REFIID IID_IAudioEndpointVolumeに設定された IMMDevice::Activate メソッドを呼び出すことによって、エンドポイント デバイスの IAudioEndpointVolume インターフェイスへの参照を取得します。
MMDevice API と WASAPI を使用するオーディオ アプリケーションでは、通常、ISimpleAudioVolume インターフェイスを使用して、セッションごとにストリーム ボリューム レベルを管理します。 まれに、特殊なオーディオ アプリケーションでは、オーディオ エンドポイント デバイスのマスター ボリューム レベルを制御するために IAudioEndpointVolume インターフェイスの使用が必要になる場合があります。 IAudioEndpointVolume のクライアントは、オーディオ エンドポイント デバイスのマスター ボリューム レベルを変更する他のオーディオ アプリケーションに破壊的影響が及ぶ可能性を回避するために注意する必要があります。 通常、ユーザーは Windows ボリューム制御プログラム (Sndvol.exe) を使用してマスター ボリューム レベルを排他的に制御できます。
エンドポイント デバイスとの間でオーディオ データをストリーミングするアダプター デバイスにハードウェア ボリュームとミュート コントロールがある場合、 IAudioEndpointVolume インターフェイスはこれらのコントロールを使用してオーディオ ストリームのボリュームとミュート設定を管理します。 オーディオ デバイスにストリームのハードウェア ボリュームコントロールがない場合、オーディオ エンジンは自動的にソフトウェアにボリュームコントロールとミュートコントロールを実装します。
エンドポイント デバイスとの間で共有モード ストリームを管理するアプリケーションの場合、 IAudioEndpointVolume の動作は、ストリームのレンダリングとストリームのキャプチャに対して異なります。
共有モード レンダリング ストリームの場合、クライアントが IAudioEndpointVolume インターフェイスを介してアクセスするエンドポイント ボリューム コントロールは、 ISimpleAudioVolume インターフェイスと IChannelAudioVolume インターフェイスが実装するセッションごとのボリューム コントロールとは独立して動作します。 したがって、レンダリング ストリームのボリューム レベルは、エンドポイント ボリューム コントロールとセッションごとのコントロールの組み合わせの効果から生じます。
共有モード キャプチャ ストリームの場合、 ISimpleAudioVolume インターフェイスと IChannelAudioVolume インターフェイスが実装するセッションごとのボリューム コントロールは、 IAudioEndpointVolume インターフェイスによって実装されるエンドポイント ボリューム コントロールに直接関連付けられます。 ISimpleAudioVolume インターフェイスと IChannelAudioVolume インターフェイスのメソッドを使用してセッションごとのボリューム コントロールを変更すると、IAudioEndpointVolume インターフェイスのボリューム コントロールの設定が変更され、逆も true になります。 各インターフェイスで表されるボリューム レベルは、次のように相互に対応します。
- ストリーム内の各チャネルについて、 IAudioEndpointVolume は、0.0 (最小ボリューム) から 1.0 (最大ボリューム) の範囲の正規化された値にマップされる、デシベル (dB) で表される オーディオテーパ ボリューム レベルを提供します。 指定できる範囲は、オーディオ ドライバーによって異なります。 詳細については、「 IAudioEndpointVolume::GetVolumeRange 」を参照してください。
- ISimpleAudioVolume::GetMasterVolume によって表されるセッション ボリュームは、0.0 から 1.0 までのスカラー値で、さまざまなチャネルの最大ボリューム設定に対応します。 たとえば、左側のチャネルが 0.8 に設定されていて、右側のチャネルが 0.4 に設定されている場合、 ISimpleAudioVolume::GetMasterVolume は 0.8 を返します。
- チャネルごとのボリューム レベルが IChannelAudioVolume インターフェイスのメソッドを使用して制御されている場合、ボリュームを示すスカラーは常にセッション ボリュームに対して相対的です。 つまり、ボリュームが最も大きいチャネルのボリュームは 1.0 です。 IAudioEndpointVolume::SetChannelVolumeLevelScalar によって 0.8 と 0.4 のボリュームに設定された 2 つのチャネルの例を考えると、IChannelAudioVolume::GetChannelVolume は 1.0 と 0.5 のボリュームを示します。
デバイスにハードウェア ボリュームとミュート コントロールがある場合、 IAudioEndpointVolume インターフェイスを介してデバイスのボリュームとミュート設定に加えられた変更は、共有モードと排他モードの両方のボリューム レベルに影響します。 デバイスにハードウェア ボリュームとミュート コントロールがない場合、 IAudioEndpointVolume インターフェイスを介してソフトウェア ボリュームとミュート コントロールに加えられた変更は、共有モードではボリューム レベルに影響しますが、排他モードでは影響しません。 排他モードでは、クライアントとデバイスはオーディオ データを直接交換し、ソフトウェア コントロールをバイパスします。 ただし、ソフトウェアコントロールは永続的であり、デバイスが排他モードで動作している間に行われたボリュームの変更は、デバイスが共有モード操作に切り替わるときに有効になります。
デバイスにハードウェア ボリュームとミュート コントロールがあるかどうかを確認するには、 IAudioEndpointVolume::QueryHardwareSupport メソッドを呼び出します。
IAudioEndpointVolume インターフェイスのメソッドを使用すると、クライアントはボリューム レベルをデシベル単位で、または正規化されたオーディオテーパ値として表現できます。 後者の場合、ボリューム レベルは、0.0 (最小ボリューム) から 1.0 (最大ボリューム) までの正規化された範囲の浮動小数点値として表されます。 この範囲内では、正規化されたボリューム レベルと信号振幅の減衰の関係が、非線形のオーディオテーパ曲線によって記述されます。 オーディオテーパカーブの詳細については、「 Audio-Tapered Volume Controls」を参照してください。
さらに、ユーザー インターフェイスでボリューム スライダーを便利にサポートするために、 IAudioEndpointVolume インターフェイスを使用すると、クライアントは個別の値または "ステップ" として表されるボリューム レベルを設定および取得できます。 このステップは、非線形のオーディオテーパ曲線上に均一に分散されます。 範囲に n 個のステップが含まれている場合、ステップには 0 から n – 1 の番号が付けられます。ここで、ステップ 0 は最小ボリューム レベルを表し、ステップ n – 1 は最大値を表します。
IAudioEndpointVolume インターフェイスを使用するコード例については、「Endpoint Volume Controls」を参照してください。
継承
IAudioEndpointVolume インターフェイスは、IUnknown インターフェイスから継承されます。 IAudioEndpointVolume には、次の種類のメンバーもあります。
メソッド
IAudioEndpointVolume インターフェイスには、これらのメソッドがあります。
IAudioEndpointVolume::GetChannelCount GetChannelCount メソッドは、オーディオ エンドポイント デバイスに出入りするオーディオ ストリーム内のチャネルの数を取得します。 |
IAudioEndpointVolume::GetChannelVolumeLevel GetChannelVolumeLevel メソッドは、オーディオ エンドポイント デバイスに出入りするオーディオ ストリーム内の指定されたチャネルのボリューム レベルをデシベル単位で取得します。 |
IAudioEndpointVolume::GetChannelVolumeLevelScalar GetChannelVolumeLevelScalar メソッドは、オーディオ エンドポイント デバイスに出入りするオーディオ ストリームの指定されたチャネルの、正規化されたオーディオテーパボリューム レベルを取得します。 |
IAudioEndpointVolume::GetMasterVolumeLevel GetMasterVolumeLevel メソッドは、オーディオ エンドポイント デバイスに出入りするオーディオ ストリームのマスター ボリューム レベルをデシベル単位で取得します。 |
IAudioEndpointVolume::GetMasterVolumeLevelScalar GetMasterVolumeLevelScalar メソッドは、オーディオ エンドポイント デバイスに出入りするオーディオ ストリームのマスター ボリューム レベルを取得します。 ボリューム レベルは、0.0 から 1.0 の範囲の正規化されたオーディオテーパ値として表されます。 |
IAudioEndpointVolume::GetMute GetMute メソッドは、オーディオ エンドポイント デバイスに出入りするオーディオ ストリームのミュート状態を取得します。 |
IAudioEndpointVolume::GetVolumeRange GetVolumeRange メソッドは、オーディオ エンドポイント デバイスに出入りするオーディオ ストリームのボリューム範囲をデシベル単位で取得します。 |
IAudioEndpointVolume::GetVolumeStepInfo GetVolumeStepInfo メソッドは、ボリューム範囲内の現在のステップに関する情報を取得します。 |
IAudioEndpointVolume::QueryHardwareSupport QueryHardwareSupport メソッドは、ハードウェアでサポートされている関数についてオーディオ エンドポイント デバイスに対してクエリを実行します。 (IAudioEndpointVolume.QueryHardwareSupport) |
IAudioEndpointVolume::RegisterControlChangeNotify RegisterControlChangeNotify メソッドは、クライアントの通知コールバック インターフェイスを登録します。 |
IAudioEndpointVolume::SetChannelVolumeLevel SetChannelVolumeLevel メソッドは、オーディオ エンドポイント デバイスに出入りするオーディオ ストリームの指定されたチャネルのボリューム レベルをデシベル単位で設定します。 |
IAudioEndpointVolume::SetChannelVolumeLevelScalar SetChannelVolumeLevelScalar メソッドは、オーディオ エンドポイント デバイスに出入りするオーディオ ストリーム内の指定されたチャネルの、正規化されたオーディオテーパボリューム レベルを設定します。 |
IAudioEndpointVolume::SetMasterVolumeLevel SetMasterVolumeLevel メソッドは、オーディオ エンドポイント デバイスに出入りするオーディオ ストリームのマスター ボリューム レベルをデシベル単位で設定します。 |
IAudioEndpointVolume::SetMasterVolumeLevelScalar SetMasterVolumeLevelScalar メソッドは、オーディオ エンドポイント デバイスに出入りするオーディオ ストリームのマスター ボリューム レベルを設定します。 ボリューム レベルは、0.0 から 1.0 の範囲の正規化されたオーディオテーパ値として表されます。 |
IAudioEndpointVolume::SetMute SetMute メソッドは、オーディオ エンドポイント デバイスに出入りするオーディオ ストリームのミュート状態を設定します。 |
IAudioEndpointVolume::UnregisterControlChangeNotify UnregisterControlChangeNotify メソッドは、クライアントが IAudioEndpointVolume::RegisterControlChangeNotify メソッドの以前の呼び出しで登録したクライアントの通知コールバック インターフェイスの登録を削除します。 |
IAudioEndpointVolume::VolumeStepDown VolumeStepDown メソッドは、オーディオ エンドポイント デバイスに出入りするオーディオ ストリームのボリューム レベルを 1 ステップでデクリメントします。 |
IAudioEndpointVolume::VolumeStepUp VolumeStepUp メソッドは、オーディオ エンドポイント デバイスに出入りするオーディオ ストリームのボリューム レベルを 1 ステップずつインクリメントします。 |
要件
サポートされている最小のクライアント | Windows Vista [デスクトップ アプリのみ | UWP アプリ] |
サポートされている最小のサーバー | Windows Server 2008 [デスクトップ アプリ | UWP アプリ] |
対象プラットフォーム | Windows |
ヘッダー | endpointvolume.h |