MSDN.WhiteKnight - Stack Overflow answers
Ответ на "Как записать звук с устройства для записи по умолчанию используя NAudio?"
Answer 879613
Нет, в общем случае устройство по умолчанию не обязано иметь код 0. Получить код можно так:
using NAudio.CoreAudioApi; using System.Runtime.InteropServices; /* ... */ [DllImport("winmm.dll")] public static extern uint waveInGetNumDevs(); public const uint DRV_RESERVED = 0x0800; public const uint DRV_QUERYFUNCTIONINSTANCEID = (DRV_RESERVED + 17); public const uint DRV_QUERYFUNCTIONINSTANCEIDSIZE = (DRV_RESERVED + 18); public const uint DRV_QUERYDEVICEINTERFACE = (DRV_RESERVED + 12); public const uint DRV_QUERYDEVICEINTERFACESIZE = (DRV_RESERVED + 13); [DllImport("winmm.dll", SetLastError = true, CharSet = CharSet.Auto, EntryPoint = "waveInMessage")] public static extern int waveInMessage1(uint hWaveIn, uint msg, ref uint dw1, uint dw2); [DllImport("winmm.dll", SetLastError = true, CharSet = CharSet.Auto, EntryPoint = "waveInMessage")] public static extern int waveInMessage2(uint hWaveIn, uint msg, [MarshalAs(UnmanagedType.LPWStr)] StringBuilder dw1, uint dw2); //получает ID (номер) устройства записи по умолчанию public static uint GetDefaultDeviceId() { string endpid = ""; var enumerator = new MMDeviceEnumerator(); using (enumerator) { var device = enumerator.GetDefaultAudioEndpoint(DataFlow.Capture, Role.Console); using (device) { endpid = device.ID; } } uint num = waveInGetNumDevs(); StringBuilder sb; uint size = 0; for (uint i = 0; i < num; i++) { size = 0; waveInMessage1(i, DRV_QUERYFUNCTIONINSTANCEIDSIZE, ref size, 0); sb = new StringBuilder((int)size + 10); waveInMessage2(i, DRV_QUERYFUNCTIONINSTANCEID, sb, size); ; if (sb.ToString() == endpid) return i; } throw new ApplicationException("Default device not found!"); }
Content is retrieved from StackExchange API.
Auto-generated by ruso-archive tools.