Смотрел код здесь - https://metanit.com/sharp/articles/5.php и здесь - https://toster.ru/q/405123
waveIn.DeviceNumber = 0; // является ли код 0 устройством по умолчанию?
Нет, в общем случае устройство по умолчанию не обязано иметь код 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!");
}
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости