2009-09-19 2 views
4

Как вы можете получить список всех записывающих устройств на компьютере с использованием NAudio? Когда вы хотите записать, вы должны указать индекс устройства, которое хотите использовать, но нет никакого способа узнать, какое устройство оно есть. Я хотел бы иметь возможность выбирать из Mic, Stereo Mix и т. Д.Перечислить записывающие устройства в NAudio

ответ

15

Для WaveIn вы можете использовать статический метод WaveIn.GetCapabilities. Это даст вам имя устройства, но с досадным ограничением, которое составляет не более 31 символа. Я все еще ищу способ получить полное имя (см. Мой вопрос here).

int waveInDevices = WaveIn.DeviceCount; 
for (int waveInDevice = 0; waveInDevice < waveInDevices; waveInDevice++) 
{ 
    WaveInCapabilities deviceInfo = WaveIn.GetCapabilities(waveInDevice); 
    Console.WriteLine("Device {0}: {1}, {2} channels", waveInDevice, deviceInfo.ProductName, deviceInfo.Channels); 
} 

Для WASAPI (Vista и выше), вы можете использовать MMDeviceEnumerator:

MMDeviceEnumerator enumerator = new MMDeviceEnumerator(); 
foreach (MMDevice device in enumerator.EnumerateAudioEndPoints(DataFlow.Capture, DeviceState.All)) 
{ 
    Console.WriteLine("{0}, {1}", device.FriendlyName, device.State); 
} 

Я склонен рекомендовать WaveIn, поскольку это более широкую поддержку, и обеспечивает большую гибкость по сравнению с частотой дискретизации записи.