728x90
스피커 혹은 마이크 설정을 프로그램에서 지정하려고 할 때는
CoreAudioApi 를 이용하면 쉽게 설정 가능합니다
https://learn.microsoft.com/en-us/windows/win32/coreaudio/core-audio-apis-in-windows-vista
Core Audio APIs - Win32 apps
Core Audio APIs
learn.microsoft.com
우선 ENUM 과 전역 변수로 디바이스 정보를 설정합니다
public enum ENUM_SOUND_DEVICE : int
{
None = 1,
Speaker,
Headset,
Earphone,
MAX
}
private string strSpeaker = "스피커";
private string strHeadset = "헤드셋";
private string strEarphone = "이어폰";
그리고 기본 설정 값을 가지고 올 때는
public int GetSoundDevice()
{
try
{
MMDeviceEnumerator me = new MMDeviceEnumerator();
MMDevice device = me.GetDefaultAudioEndpoint(EDataFlow.eRender, ERole.eMultimedia);
if (device.FriendlyName == strSpeaker)
{
return (int)ENUM_SOUND_DEVICE.Speaker;
}
else if (device.FriendlyName == strHeadset)
{
return (int)ENUM_SOUND_DEVICE.Headset;
}
else if (device.FriendlyName == strEarphone)
{
return (int)ENUM_SOUND_DEVICE.Earphone;
}
}
catch{ }
return (int)ENUM_SOUND_DEVICE.None;
}
위와 같이 함수를 작성하면 되고
스피커 지정 방법은 아래와 같습니다
private bool SetSoundDevice(string strDeviceName)
{
try
{
MMDeviceEnumerator me = new MMDeviceEnumerator();
MMDeviceCollection deviceCollection = me.EnumerateAudioEndPoints(EDataFlow.eRender, EDeviceState.DEVICE_STATE_ACTIVE);
PolicyConfigClient pcc = new PolicyConfigClient();
for (int iCnt = 0; iCnt < deviceCollection.Count; iCnt++)
{
MMDevice device = deviceCollection[iCnt];
if (device.FriendlyName == strDeviceName)
{
pcc.SetDefaultEndpoint(device.ID, ERole.eMultimedia);
pcc.SetDefaultEndpoint(device.ID, ERole.eCommunications);
return true;
}
}
}
catch { }
return false;
}
마지막으로 마이크 설정을 하려면 아래와 같이 함수를 작성하면 됩니다
private void SetMicDevice(string strDeviceName)
{
try
{
MMDeviceEnumerator me = new MMDeviceEnumerator();
MMDeviceCollection deviceCollection = me.EnumerateAudioEndPoints(EDataFlow.eCapture, EDeviceState.DEVICE_STATE_ACTIVE);
PolicyConfigClient pcc = new PolicyConfigClient();
for (int iCnt = 0; iCnt < deviceCollection.Count; iCnt++)
{
MMDevice device = deviceCollection[iCnt];
if (device.FriendlyName == strDeviceName)
{
pcc.SetDefaultEndpoint(device.ID, ERole.eMultimedia);
pcc.SetDefaultEndpoint(device.ID, ERole.eCommunications);
return;
}
}
}
catch { }
}
제 글이 도움이 되셨다면 댓글 & 공감 부탁드려요 😀
728x90
'Application > C# (WPF)' 카테고리의 다른 글
[C#/WPF] 둥근 버튼 만들기 & 마우스 오버 글자 크기 및 색 변경 (0) | 2023.07.14 |
---|---|
[C# WPF] 파일명 & 버전 가져오기 (0) | 2023.01.26 |
[C# WPF] GIF 파일 재생하기 (MediaElement) (0) | 2023.01.18 |
[C# WPF] Background 이미지 설정하기 (0) | 2023.01.17 |
[C# WPF] 이미지 화질 개선 (Bitmap 화질 높이기) (0) | 2023.01.16 |