IAudioEndpointVolume 인터페이스(endpointvolume.h)

IAudioEndpointVolume 인터페이스는 오디오 엔드포인트 디바이스를 오가는 오디오 스트림의 볼륨 컨트롤을 나타냅니다. 클라이언트는 매개 변수 iid가 REFIID IID_IAudioEndpointVolume 설정된 IMMDevice::Activate 메서드를 호출하여 엔드포인트 디바이스의 IAudioEndpointVolume 인터페이스에 대한 참조를 가져옵니다.

MMDevice APIWASAPI를 사용하는 오디오 애플리케이션은 일반적으로 ISimpleAudioVolume 인터페이스를 사용하여 세션별로 스트림 볼륨 수준을 관리합니다. 드문 경우로 특수 오디오 애플리케이션은 IAudioEndpointVolume 인터페이스를 사용하여 오디오 엔드포인트 디바이스의 master 볼륨 수준을 제어해야 할 수 있습니다. IAudioEndpointVolume의 클라이언트는 오디오 엔드포인트 디바이스의 master 볼륨 수준을 변경하는 다른 오디오 애플리케이션에 잠재적으로 파괴적인 영향을 미치지 않도록 주의해야 합니다. 일반적으로 사용자는 Sndvol.exe Windows 볼륨 제어 프로그램을 통해 master 볼륨 수준을 단독으로 제어할 수 있습니다.

엔드포인트 디바이스에서 오디오 데이터를 스트리밍하는 어댑터 디바이스에 하드웨어 볼륨 및 음소거 컨트롤이 있는 경우 IAudioEndpointVolume 인터페이스는 이러한 컨트롤을 사용하여 오디오 스트림의 볼륨 및 음소거 설정을 관리합니다. 오디오 디바이스에 스트림에 대한 하드웨어 볼륨 컨트롤이 없는 경우 오디오 엔진은 소프트웨어에서 볼륨 및 음소거 컨트롤을 자동으로 구현합니다.

엔드포인트 디바이스 간 공유 모드 스트림을 관리하는 애플리케이션의 경우 IAudioEndpointVolume 의 동작은 스트림을 렌더링하고 스트림을 캡처하기 위해 다릅니다.

공유 모드 렌더링 스트림의 경우 클라이언트가 IAudioEndpointVolume 인터페이스를 통해 액세스하는 엔드포인트 볼륨 컨트롤은 ISimpleAudioVolumeIChannelAudioVolume 인터페이스가 구현하는 세션별 볼륨 컨트롤과 독립적으로 작동합니다. 따라서 렌더링 스트림의 볼륨 수준은 엔드포인트 볼륨 컨트롤과 세션별 컨트롤의 결합된 효과로 인해 발생합니다.

공유 모드 캡처 스트림의 경우 ISimpleAudioVolumeIChannelAudioVolume 인터페이스가 구현하는 세션별 볼륨 컨트롤은 IAudioEndpointVolume 인터페이스에서 구현된 엔드포인트 볼륨 컨트롤에 직접 연결됩니다. ISimpleAudioVolumeIChannelAudioVolume 인터페이스의 메서드를 통해 세션별 볼륨 컨트롤을 변경하면 IAudioEndpointVolume 인터페이스의 볼륨 컨트롤 설정이 변경되고 반대의 경우도 마찬가지입니다. 각 인터페이스가 나타내는 볼륨 수준은 다음과 같이 서로 일치합니다.

  • 스트림의 각 채널에 대해 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, IChannelAudioVolume::GetChannelVolume에서 0.8 및 0.4 볼륨으로 설정된 두 채널의 예제를 보면 볼륨은 1.0 및 0.5를 나타냅니다.
참고EndpointVolume API의 클라이언트는 이후 릴리스에서 변경될 수 있으므로 이전 동작을 사용하지 않아야 합니다.
 

디바이스에 하드웨어 볼륨 및 음소거 컨트롤이 있는 경우 IAudioEndpointVolume 인터페이스를 통해 디바이스 볼륨 및 음소거 설정을 변경하면 공유 모드와 단독 모드 모두에서 볼륨 수준에 영향을 줍니다. 디바이스에 하드웨어 볼륨 및 음소거 컨트롤이 없는 경우 IAudioEndpointVolume 인터페이스를 통해 소프트웨어 볼륨 및 음소거 컨트롤에 대한 변경 내용은 공유 모드의 볼륨 수준에 영향을 주지만 배타적 모드에서는 적용되지 않습니다. 전용 모드에서 클라이언트와 디바이스는 소프트웨어 컨트롤을 우회하여 오디오 데이터를 직접 교환합니다. 그러나 소프트웨어 컨트롤은 영구적이며 디바이스가 단독 모드로 작동하는 동안 수행된 볼륨 변경은 디바이스가 공유 모드 작업으로 전환할 때 적용됩니다.

디바이스에 하드웨어 볼륨 및 음소거 컨트롤이 있는지 확인하려면 IAudioEndpointVolume::QueryHardwareSupport 메서드를 호출합니다.

IAudioEndpointVolume 인터페이스의 메서드를 사용하면 클라이언트가 볼륨 수준을 데시벨 또는 정규화된 오디오 테이퍼 값으로 표현할 수 있습니다. 후자의 경우 볼륨 수준은 정규화된 범위의 부동 소수점 값으로 0.0(최소 볼륨)에서 1.0(최대 볼륨)으로 표현됩니다. 이 범위 내에서 정규화된 볼륨 수준과 신호 진폭 감쇠의 관계는 비선형 오디오 테이퍼 곡선으로 설명됩니다. 오디오 테이퍼 곡선에 대한 자세한 내용은 오디오 테이퍼 볼륨 컨트롤을 참조하세요.

또한 사용자 인터페이스에서 볼륨 슬라이더를 편리하게 지원하기 위해 IAudioEndpointVolume 인터페이스를 사용하면 클라이언트가 불연속 값 또는 "단계"로 표현되는 볼륨 수준을 설정하고 가져올 수 있습니다. 단계는 비선형 오디오 테이퍼 곡선에 균일하게 분산됩니다. 범위에 n 단계가 포함된 경우 단계는 0에서 n– 1까지 번호가 매겨집니다. 여기서 0단계는 최소 볼륨 수준을 나타내고 1단계 최대값을 나타냅니다.

IAudioEndpointVolume 인터페이스를 사용하는 코드 예제는 엔드포인트 볼륨 컨트롤을 참조하세요.

상속

IAudioEndpointVolume 인터페이스는 IUnknown 인터페이스에서 상속됩니다. IAudioEndpointVolume 에는 다음과 같은 유형의 멤버도 있습니다.

메서드

IAudioEndpointVolume 인터페이스에는 이러한 메서드가 있습니다.

 
IAudioEndpointVolume::GetChannelCount

GetChannelCount 메서드는 오디오 엔드포인트 디바이스를 입력하거나 종료하는 오디오 스트림의 채널 수를 가져옵니다.
IAudioEndpointVolume::GetChannelVolumeLevel

GetChannelVolumeLevel 메서드는 오디오 엔드포인트 디바이스를 입력하거나 종료하는 오디오 스트림에서 지정된 채널의 볼륨 수준(데시벨)을 가져옵니다.
IAudioEndpointVolume::GetChannelVolumeLevelScalar

GetChannelVolumeLevelScalar 메서드는 오디오 엔드포인트 디바이스를 입력하거나 종료하는 오디오 스트림의 지정된 채널의 정규화된 오디오 테이퍼 볼륨 수준을 가져옵니다.
IAudioEndpointVolume::GetMasterVolumeLevel

GetMasterVolumeLevel 메서드는 오디오 엔드포인트 디바이스에 들어오거나 나가는 오디오 스트림의 master 볼륨 수준(데시벨)을 가져옵니다.
IAudioEndpointVolume::GetMasterVolumeLevelScalar

GetMasterVolumeLevelScalar 메서드는 오디오 엔드포인트 디바이스에 들어오거나 나가는 오디오 스트림의 master 볼륨 수준을 가져옵니다. 볼륨 수준은 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 메서드는 오디오 엔드포인트 디바이스에 들어오거나 나가는 오디오 스트림의 master 볼륨 수준(데시벨)을 설정합니다.
IAudioEndpointVolume::SetMasterVolumeLevelScalar

SetMasterVolumeLevelScalar 메서드는 오디오 엔드포인트 디바이스에 들어오거나 나가는 오디오 스트림의 master 볼륨 수준을 설정합니다. 볼륨 수준은 0.0에서 1.0까지의 범위에서 정규화된 오디오 테이퍼 값으로 표현됩니다.
IAudioEndpointVolume::SetMute

SetMute 메서드는 오디오 엔드포인트 디바이스로 들어오거나 나가는 오디오 스트림의 음소거 상태를 설정합니다.
IAudioEndpointVolume::UnregisterControlChangeNotify

UnregisterControlChangeNotify 메서드는 IAudioEndpointVolume::RegisterControlChangeNotify 메서드에 대한 이전 호출에서 클라이언트가 등록한 클라이언트의 알림 콜백 인터페이스 등록을 삭제합니다.
IAudioEndpointVolume::VolumeStepDown

VolumeStepDown 메서드는 오디오 엔드포인트 디바이스에 들어오거나 나가는 오디오 스트림의 볼륨 수준을 한 단계씩 감소합니다.
IAudioEndpointVolume::VolumeStepUp

VolumeStepUp 메서드는 오디오 엔드포인트 디바이스에 들어오거나 나가는 오디오 스트림의 볼륨 수준을 한 단계씩 증가합니다.

요구 사항

   
지원되는 최소 클라이언트 Windows Vista [데스크톱 앱 | UWP 앱]
지원되는 최소 서버 Windows Server 2008 [데스크톱 앱 | UWP 앱]
대상 플랫폼 Windows
헤더 endpointvolume.h

추가 정보

핵심 오디오 인터페이스

EndpointVolume API

IMMDevice::Activate

ISimpleAudioVolume 인터페이스