Windows API를 사용하여 C#에서 오디오 입력 장치 목록 조회하기
Windows API (winmm.dll) 라이브러리 사용하여 오디오 입력 장치 조회
안녕하세요! 이번 포스트에서는 C#에서 Windows API의 winmm.dll 라이브러리를 사용하여 오디오 입력 장치 목록을 조회하는 방법을 소개합니다. 이를 통해 오디오 입력 장치의 정보를 프로그램에서 동적으로 가져올 수 있습니다.
WinMethod 클래스 설명
먼저, winmm.dll
을 사용하기 위한 클래스를 정의합니다. 이 클래스는 오디오 입력과 출력을 처리할 수 있는 다양한 구조체와 메서드를 포함하고 있습니다.
unsafe public class WinMethod
{
// WAVEINCAPS 구조체 정의
[StructLayout(LayoutKind.Sequential, Pack = 4, CharSet = CharSet.Auto)]
public struct WAVEINCAPS
{
public short wMid;
public short wPid;
public int vDriverVersion;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)]
public string szPname;
public uint dwFormats;
public short wChannels;
public short wReserved;
public int dwSupport;
}
// waveInGetNumDevs()와 waveInGetDevCaps() 메서드 정의
[DllImport("winmm.dll", SetLastError = true)]
public static extern uint waveInGetNumDevs();
[DllImport("winmm.dll", SetLastError = true, CharSet = CharSet.Auto)]
public static extern uint waveInGetDevCaps(int index, ref WAVEINCAPS pwic, int cbwic);
}
위 코드에서는 WAVEINCAPS
구조체와 함께 오디오 입력 장치의 수를 가져오는 waveInGetNumDevs()
와 각 장치의 정보를 조회하는 waveInGetDevCaps()
메서드를 정의합니다.
오디오 입력 장치 목록 조회 샘플 코드
이제 위에서 정의한 메서드를 사용하여 오디오 입력 장치 목록을 조회하는 샘플 코드를 제공합니다. 아래 코드는 waveInGetNumDevs()
로 장치의 수를 가져온 뒤, 각 장치에 대한 이름을 waveInGetDevCaps()
로 확인합니다.
public static List GetWaveInDeviceNames()
{
List list = new List();
WinMethod.WAVEINCAPS waveInCap = new WinMethod.WAVEINCAPS();
uint num = WinMethod.waveInGetNumDevs();
for (int i = 0; i < num; i++)
{
uint hr = WinMethod.waveInGetDevCaps(i, ref waveInCap, Marshal.SizeOf(typeof(WinMethod.WAVEINCAPS)));
if (hr == (int)WinMethod.HRESULT.S_OK)
{
list.Add(waveInCap.szPname); // 장치 이름 추가
}
}
return list;
}
위 코드에서 GetWaveInDeviceNames
메서드는 오디오 입력 장치의 이름을 리스트로 반환합니다.
이를 통해 시스템에 연결된 오디오 입력 장치들을 쉽게 확인할 수 있습니다.
관련 메서드 설명
위 코드에서 사용된 waveInGetNumDevs()
와 waveInGetDevCaps()
메서드는 각각 시스템에 연결된 오디오 입력 장치의 수와 각 장치의 정보를 가져옵니다.
- waveInGetNumDevs: 시스템에 연결된 오디오 입력 장치의 총 수를 반환합니다.
- waveInGetDevCaps: 특정 오디오 입력 장치의 정보를 반환합니다. 이 정보에는 장치 이름, 지원되는 포맷, 채널 수 등이 포함됩니다.