如何使用NAudio获取计算机上所有录制设备的列表?当你想要录制时,你必须给它你想要使用的设备的索引,但是没有办法知道它是什么设备。我希望能够选择Mic,Stereo Mix等。
答案 0 :(得分:22)
对于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,因为它得到了更广泛的支持,并且在记录采样率方面具有更大的灵活性。
答案 1 :(得分:1)
要获取完整的设备名称,请使用此...
using NAudio.CoreAudioApi;
using NAudio.Wave;
要获取所有记录设备:
//create enumerator
var enumerator = new MMDeviceEnumerator();
//cycle through all audio devices
for (int i = 0; i < WaveIn.DeviceCount; i++)
Console.WriteLine(enumerator.EnumerateAudioEndPoints(DataFlow.Capture, DeviceState.Active)[i]);
//clean up
enumerator.Dispose();
要获取所有捕获设备:
//create enumerator
var enumerator = new MMDeviceEnumerator();
//cyckle trough all audio devices
for (int i = 0; i < WaveOut.DeviceCount; i++)
Console.WriteLine(enumerator.EnumerateAudioEndPoints(DataFlow.Render, DeviceState.Active)[i]);
//clean up
enumerator.Dispose();