EndpointVolume API

EndpointVolume API를 사용하면 특수 클라이언트가 오디오 엔드포인트 디바이스의 볼륨 수준을 제어하고 모니터링할 수 있습니다. 클라이언트는 오디오 엔드포인트 디바이스의 IMMDevice 인터페이스를 가져오고 IMMDevice::Activate 메서드를 호출하여 EndpointVolume API의 인터페이스에 대한 참조를 가져옵니다.

헤더 파일 Endpointvolume.h는 EndpointVolume API의 인터페이스를 정의합니다.

MMDevice APIWASAPI를 사용하는 오디오 애플리케이션은 일반적으로 ISimpleAudioVolume 인터페이스를 사용하여 세션별로 볼륨 수준을 제어합니다. 두 가지 유형의 오디오 애플리케이션만 EndpointVolume API를 사용해야 합니다. 이러한 애플리케이션 유형은 다음과 같습니다.

  • Windows 볼륨 제어 프로그램과 유사한 오디오 엔드포인트 디바이스의 master 볼륨 수준을 관리하는 애플리케이션은 Sndvol.exe.
  • 오디오 엔드포인트 디바이스에 대한 전용 모드 액세스가 필요한 전문 오디오("프로 오디오") 애플리케이션.

EndpointVolume API를 부적절하게 사용하면 Windows 오디오 정책을 방해하고 사용자의 시스템 볼륨 설정을 방해할 수 있습니다.

오디오 엔드포인트 디바이스가 하드웨어 볼륨을 구현하고 컨트롤을 음소거하는 경우 EndpointVolume API는 이러한 컨트롤을 사용하여 디바이스 볼륨을 관리합니다. 그렇지 않으면 EndpointVolume API는 소프트웨어에서 컨트롤을 클라이언트에 투명하게 구현합니다.

디바이스에 하드웨어 볼륨 및 음소거 컨트롤이 있는 경우 EndpointVolume API를 통해 디바이스 볼륨 및 음소거 설정을 변경하면 공유 모드와 배타적 모드 모두에서 볼륨 수준에 영향을 줍니다. 디바이스에 하드웨어 볼륨 및 음소거 컨트롤이 없는 경우 EndpointVolume API를 통해 소프트웨어 볼륨 및 음소거 컨트롤에 대한 변경 내용은 공유 모드의 볼륨 수준에 영향을 주지만 배타적 모드에서는 영향을 미치지 않습니다. 전용 모드에서 클라이언트와 디바이스는 소프트웨어 컨트롤을 우회하여 오디오 데이터를 직접 교환합니다.

하드웨어 볼륨을 관리하고 컨트롤을 음소거해야 하는 애플리케이션의 경우 EndpointVolume API는 DeviceTopology API에 비해 두 가지 잠재적인 이점을 제공합니다.

첫째, 많은 오디오 어댑터 디바이스에는 하드웨어 볼륨 컨트롤이 부족합니다. 디바이스에 하드웨어 볼륨 제어가 없는 경우 EndpointVolume API의 IAudioEndpointVolume 인터페이스는 해당 디바이스를 오가는 스트림에서 소프트웨어 볼륨 컨트롤을 자동으로 구현합니다. EndpointVolume API의 클라이언트의 경우 볼륨 제어가 디바이스 또는 EndpointVolume API 인터페이스의 소프트웨어에서 하드웨어에서 구현되는지 여부와 동일합니다.

둘째, 어댑터 디바이스가 하드웨어 볼륨 컨트롤을 구현하더라도 DeviceTopology API를 사용하여 토폴로지 순회 알고리즘을 구현하는 애플리케이션이 찾고 있는 컨트롤을 찾지 못할 수 있습니다. 일반적으로 이러한 애플리케이션은 특정 디바이스 또는 관련 디바이스 집합의 하드웨어 토폴로지를 트래버스하도록 설계되었습니다. 애플리케이션이 특별히 설계되거나 테스트되지 않은 디바이스의 토폴로지를 트래버스하려고 하면 실패할 위험이 있습니다.

볼륨 및 음소거 컨트롤 이외의 하드웨어 함수에 액세스해야 하는 특수 애플리케이션만 DeviceTopology API를 사용해야 합니다. 전용 모드 스트림의 볼륨 수준만 제어해야 하는 애플리케이션의 경우 EndpointVolume API는 사용하기가 더 간단하고 광범위한 오디오 하드웨어 디바이스에서 안정적으로 작동합니다.

EndpointVolume API의 인터페이스를 사용하는 코드 예제는 다음 topics 참조하세요.

EndpointVolume API를 사용하는 샘플을 보려면 Windows SDK의 EndpointVolume 을 참조하세요.

EndpointVolume API는 다음 인터페이스를 구현합니다.

인터페이스 설명
IAudioEndpointVolume 오디오 엔드포인트 디바이스를 오가는 오디오 스트림의 볼륨 컨트롤을 나타냅니다.
IAudioMeterInformation 오디오 엔드포인트 디바이스를 오가는 오디오 스트림의 최대 측정기를 나타냅니다.

 

또한 오디오 엔드포인트 디바이스의 볼륨 알림 및 변경 내용 음소거가 필요한 EndpointVolume API의 클라이언트는 다음 인터페이스를 구현해야 합니다.

인터페이스 Description
IAudioEndpointVolumeCallback 오디오 엔드포인트 디바이스의 볼륨 수준 또는 음소거 상태가 변경되는 경우 알림을 제공합니다.

 

볼륨 컨트롤

IMMDevice 인터페이스

IMMDevice::Activate

ISimpleAudioVolume

프로그래밍 참조