13

NAudio を使用して、コンピューター上のすべての録音デバイスのリストを取得するにはどうすればよいですか? 録音するときは、使用したいデバイスのインデックスを指定する必要がありますが、それがどのデバイスであるかを知る方法はありません。マイク、ステレオミックスなどから選択できるようにしたいです。

4

2 に答える 2

31

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 の方が広くサポートされており、サンプル レートをより柔軟に記録できるため、私は WaveIn をお勧めします。

于 2009-09-20T06:03:24.647 に答える
2

完全なデバイス名を取得するには、これを使用します...

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();
于 2020-06-18T21:51:31.447 に答える