볼륨 컨트롤

공유 모드 스트림을 관리하는 클라이언트는 일반적으로 WASAPIISimpleAudioVolumeIAudioSessionEvents 인터페이스를 사용하여 스트림 볼륨 수준을 제어하고 모니터링합니다. ISimpleAudioVolume 인터페이스의 메서드를 통해 클라이언트는 공유 모드 스트림이 속한 오디오 세션의 볼륨 수준을 가져와서 설정할 수 있습니다. Sndvol 또는 다른 애플리케이션이 세션 볼륨 수준을 변경하는 경우 클라이언트는 IAudioSessionEvents 인터페이스를 통해 변경 알림을 받을 수 있습니다.

단독 모드 스트림을 관리하는 클라이언트는 일반적으로 EndpointVolume APIIAudioEndpointVolumeIAudioEndpointVolumeCallback 인터페이스를 사용하여 스트림 볼륨 수준을 제어하고 모니터링합니다. IAudioEndpointVolume 인터페이스의 메서드를 통해 클라이언트는 오디오 엔드포인트 디바이스의 볼륨 수준을 가져와서 설정할 수 있습니다. Sndvol 또는 다른 애플리케이션이 엔드포인트 디바이스의 볼륨 수준을 변경하는 경우 클라이언트는 IAudioEndpointVolumeCallback 인터페이스를 통해 변경 알림을 받을 수 있습니다.

오디오 세션에서 설명한 대로 Sndvol은 시스템 볼륨 제어 프로그램입니다. 시스템의 오디오 렌더링 엔드포인트 디바이스에 대한 볼륨 컨트롤을 표시합니다. (현재 오디오 캡처 엔드포인트 디바이스에 대한 볼륨 컨트롤은 표시되지 않습니다.) 특정 디바이스에 대한 볼륨 컨트롤을 보려면 메뉴 모음에서 디바이스 를 클릭하고 사용 가능한 디바이스 목록에서 디바이스 이름을 선택합니다.

Sndvol 창은 디바이스의 볼륨 컨트롤을 두 그룹으로 구분합니다. 창의 왼쪽에 있는 그룹 상자에는 디바이스라는 레이블이 지정되어 있습니다. 디바이스 상자에는 IAudioEndpointVolume 인터페이스에 의해 제어되는 단일 볼륨 컨트롤이 포함되어 있습니다. 사용자가 이 볼륨 컨트롤에 적용한 변경 내용은 IAudioEndpointVolumeCallback 인터페이스를 통해 모니터링할 수 있습니다.

Sndvol 창의 오른쪽에 있는 그룹 상자에는 애플리케이션이라는 레이블이 지정되어 있습니다. 애플리케이션 상자에는 현재 디바이스를 공유하는 애플리케이션에 대한 볼륨 컨트롤이 포함되어 있습니다. 공유 모드에서 디바이스를 사용하는 애플리케이션의 경우 볼륨 컨트롤은 ISimpleAudioVolume 인터페이스에 의해 제어되는 볼륨 수준을 나타냅니다. 사용자가 이러한 볼륨 컨트롤에 적용한 변경 내용은 IAudioSessionEvents 인터페이스를 통해 모니터링할 수 있습니다.

공유 모드 애플리케이션은 IAudioSessionEvents 인터페이스를 사용하여 사용자가 Sndvol 창의 애플리케이션 상자에서 애플리케이션의 볼륨 제어에 대한 변경 내용을 모니터링할 수 있지만 애플리케이션은 관련 없는 다른 애플리케이션의 볼륨 컨트롤에 대한 변경 내용을 모니터링할 수 없습니다. 마찬가지로 애플리케이션은 ISimpleAudioVolume 인터페이스를 통해 오디오 세션의 볼륨 수준을 변경할 수 있지만 관련 없는 다른 애플리케이션에 속하는 세션의 볼륨 수준을 변경할 수는 없습니다.

그러나 둘 이상의 관련 애플리케이션(또는 동일한 애플리케이션의 인스턴스)은 동일한 프로세스 간 세션에 오디오 스트림을 할당하거나 해당 세션을 동일한 그룹화 매개 변수와 연결하여 Sndvol 창의 애플리케이션 상자에서 동일한 볼륨 제어를 공유할 수 있습니다. 자세한 내용은 오디오 세션 및그룹화 매개 변수를 참조하세요.

WASAPI는 공유 모드 스트림의 볼륨 수준을 제어하기 위해 IChannelAudioVolumeIAudioStreamVolume라는 두 개의 추가 인터페이스를 제공합니다. 이러한 인터페이스는 주로 세션의 개별 채널 또는 세션의 개별 스트림의 볼륨 수준을 제어해야 하는 특수 클라이언트에서 사용됩니다.

DeviceTopology API를 사용하면 클라이언트가 오디오 어댑터의 토폴로지에서 볼륨 컨트롤에 액세스할 수 있습니다. 그러나 단독 모드 스트림을 관리하는 클라이언트는 일반적으로 DeviceTopology API 대신 EndpointVolume API를 사용하여 스트림 볼륨 수준을 제어합니다. EndpointVolume API는 두 가지 방법으로 엔드포인트 디바이스의 볼륨 제어를 간소화합니다. 먼저 엔드포인트 디바이스가 하드웨어 볼륨 컨트롤을 구현하는 경우 DeviceTopology API를 사용하려면 클라이언트가 하드웨어 컨트롤을 검색하여 디바이스 토폴로지를 트래버스해야 합니다. 반면 EndpointVolume API는 클라이언트에 대한 하드웨어 볼륨 제어를 자동으로 찾습니다. 둘째, 엔드포인트 디바이스가 하드웨어 볼륨 제어를 구현하지 않는 경우 DeviceTopology 클라이언트는 소프트웨어에서 볼륨 제어를 구현해야 합니다. 반면 EndpointVolume API는 누락된 하드웨어 컨트롤에 대한 소프트웨어 볼륨 제어를 자동으로 대체합니다.

다음 섹션에서는 오디오 세션 및 오디오 엔드포인트 디바이스에 대한 볼륨 컨트롤에 대해 설명합니다.

프로그래밍 가이드