在NAudio中列举录音设备

问题描述 投票:9回答:2

如何使用NAudio获得电脑上所有录音设备的列表? 当你要录音时,你必须给它你要使用的设备的索引,但没有办法知道那是什么设备。 我希望能够从 "麦克风"、"立体声混音 "等设备中进行选择。

c# naudio
2个回答
26
投票

对于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,因为它的支持更广泛,并且允许更灵活的录音采样率。


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();
© www.soinside.com 2019 - 2024. All rights reserved.