티스토리 뷰

c#

[C#] 오디오 입력장치 조회

개발에대해 2024. 7. 11. 11:16
반응형

 

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: 특정 오디오 입력 장치의 정보를 반환합니다. 이 정보에는 장치 이름, 지원되는 포맷, 채널 수 등이 포함됩니다.

'c#' 카테고리의 다른 글

[C#] DTMF 전송 방식 (In-band vs Out-of-band) 및 RTP 패킷  (0) 2024.08.07
[C#] WPF Button 이미지  (0) 2024.07.17
[C#] AES256 암/복호화  (0) 2024.07.10