Application/C# (WPF)

[C# WPF] 스피커 & 마이크 설정하기

devsalix 2023. 1. 25. 17:51
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