如何使用NAudio获得电脑上所有录音设备的列表? 当你要录音时,你必须给它你要使用的设备的索引,但没有办法知道那是什么设备。 我希望能够从 "麦克风"、"立体声混音 "等设备中进行选择。
对于WaveIn,你可以使用静态WaveIn.GetCapabilities方法。这将给你一个设备名称,但有一个恼人的限制,即它最多只能是31个字符。我仍然在寻找获得完整名称的方法(见我的问题)。此处).
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,因为它的支持更广泛,并且允许更灵活的录音采样率。
要获得完整的设备名称,我使用这个......
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();