Windows Audio Api 볼륨조절
음성방송쪽을 작업하다가 비스타관련해서 조작이 잘안되는 문제가 있어서
다시 이번에 Core Audio Api를 보면서 잠시 글을 남겨본다.
윈도우 비스타 이후부터 사용자모드 오디오 콤포넌트(볼륨조절 컨트롤)를 어플리케이션마다 제공한다.
기본 xp이하에서는 waveXXX, MixerXXX함수 그리고 DirectSound등으로 제어를 했다.
당연히 비스타도 제어가 가능하다 하지만 위의 함수로 제어를 하게 되면 어플리케이션에 종속된 볼륨이나 Mute를 설정하게 되는것이다.
즉, 마스터 볼륨을 조절할수가 없는것이다.
마스터 볼륨을 조절하기 위해서는 Core Audio Api를 사용해야 한다. 비스타 이후부터..
그럼 이제 Core Audio Api를 알아보자.
Core Audio Api
이 새로운 API는 COM기반으로 만들었으모 4개의 서브API로 구성되어있다.
MMDevice API : 시스템 오디오 디바이스 이용가능한 인스턴스와 목록에 관련된 API다.
WASAPI : 오디오 스트림들의 저장과 플레이를 허용하는 API
DeviceTopology API : 저음이나 고음 베이스등의 기능들의 하드웨어 엑세스를 허용하는 API다.
EndpointVolume API : 볼륨이나 Peak 미터를 제어한다.
MMDevice와 EndpointVolume API는 마스터볼륨과 Mute세팅을 위해 필요하다.
항상 enumerator class를 생성하며 시작하며 원하는 디바이스를 찾거나 디폴트 디바이스를 위한 세팅을 한다.
MMDeviceEnumerator devEnum = new MMDeviceEnumerator();
MMDevice defaultDevice = devEnum.GetDefaultAudioEndpoint(EDataFlow.eRender, ERole.
MMDevice 오브젝트를 가진후 쉽게 toggling Mute를 할수있다.
defaultDevice.AudioEndpointVolume.Mute = !defaultDevice.AudioEndpointVolume.Mute;
또는 왼쪽채널의 볼륨을 가져올수도 있다.
Console.WriteLine("Left Volume : {0}", defaultDevice.AudioEndpointVolume.Channels[0].VolumeLev
모든 채널을 위한 peak meters같은 더 향상된것을 할수있다.
Console.WriteLine("Master Peak : {0}",
defaultDevice.AudioMeterInformation.MasterPeakValue);
Console.WriteLine("Left Peak : {0}",
defaultDevice.AudioMeterInformation.PeakValues[0]);
Console.WriteLine("Right Peak : {0}",
defaultDevice.AudioMeterInformation.PeakValues[1]);
볼륨변화에 따른 이벤트를 받고자 한다면 nVolumeNotification를 이용한다.
defaultDevice.AudioEndpointVolume.OnVolumeNotification += new
AudioEndpointVolumeNotificationDelegate(
AudioEndpointVolume_OnVolumeNotification);
.
.
void AudioEndpointVolume_OnVolumeNotification(AudioVolumeNotificationData data)
{
Console.WriteLine("New Volume {0}", data.MasterVolume);
Console.WriteLine("Muted {0}", data.Muted);
}
다시 이번에 Core Audio Api를 보면서 잠시 글을 남겨본다.
윈도우 비스타 이후부터 사용자모드 오디오 콤포넌트(볼륨조절 컨트롤)를 어플리케이션마다 제공한다.
기본 xp이하에서는 waveXXX, MixerXXX함수 그리고 DirectSound등으로 제어를 했다.
당연히 비스타도 제어가 가능하다 하지만 위의 함수로 제어를 하게 되면 어플리케이션에 종속된 볼륨이나 Mute를 설정하게 되는것이다.
즉, 마스터 볼륨을 조절할수가 없는것이다.
마스터 볼륨을 조절하기 위해서는 Core Audio Api를 사용해야 한다. 비스타 이후부터..
그럼 이제 Core Audio Api를 알아보자.
Core Audio Api
이 새로운 API는 COM기반으로 만들었으모 4개의 서브API로 구성되어있다.
MMDevice API : 시스템 오디오 디바이스 이용가능한 인스턴스와 목록에 관련된 API다.
WASAPI : 오디오 스트림들의 저장과 플레이를 허용하는 API
DeviceTopology API : 저음이나 고음 베이스등의 기능들의 하드웨어 엑세스를 허용하는 API다.
EndpointVolume API : 볼륨이나 Peak 미터를 제어한다.
MMDevice와 EndpointVolume API는 마스터볼륨과 Mute세팅을 위해 필요하다.
항상 enumerator class를 생성하며 시작하며 원하는 디바이스를 찾거나 디폴트 디바이스를 위한 세팅을 한다.
MMDeviceEnumerator devEnum = new MMDeviceEnumerator();
MMDevice defaultDevice = devEnum.GetDefaultAudioEndpoint(EDataFlow.eRender, ERole.
MMDevice 오브젝트를 가진후 쉽게 toggling Mute를 할수있다.
defaultDevice.AudioEndpointVolume.Mute = !defaultDevice.AudioEndpointVolume.Mute;
또는 왼쪽채널의 볼륨을 가져올수도 있다.
Console.WriteLine("Left Volume : {0}", defaultDevice.AudioEndpointVolume.Channels[0].VolumeLev
모든 채널을 위한 peak meters같은 더 향상된것을 할수있다.
Console.WriteLine("Master Peak : {0}",
defaultDevice.AudioMeterInformation.MasterPeakValue);
Console.WriteLine("Left Peak : {0}",
defaultDevice.AudioMeterInformation.PeakValues[0]);
Console.WriteLine("Right Peak : {0}",
defaultDevice.AudioMeterInformation.PeakValues[1]);
볼륨변화에 따른 이벤트를 받고자 한다면 nVolumeNotification를 이용한다.
defaultDevice.AudioEndpointVolume.OnVolumeNotification += new
AudioEndpointVolumeNotificationDelegate(
AudioEndpointVolume_OnVolumeNotification);
.
.
void AudioEndpointVolume_OnVolumeNotification(AudioVolumeNotificationData data)
{
Console.WriteLine("New Volume {0}", data.MasterVolume);
Console.WriteLine("Muted {0}", data.Muted);
}
댓글
댓글 쓰기