如何获取声音输出设备ID

时间:2013-09-22 16:14:46

标签: c# naudio

我正在使用NAudio在我的WinForms应用中播放mp3文件。但是,文件需要播放到用户选择的设备,而不是Windows默认设备。所以,我现在正在做的是使用以下代码加载所有可用的设备:

  {
  ManagementObjectSearcher mo =
  new ManagementObjectSearcher("select * from Win32_SoundDevice");

        foreach (ManagementObject soundDevice in mo.Get())
        {
            String name = soundDevice.GetPropertyValue("Name").ToString();
            comboBox1.Items.Add(name);
        } 
    }

现在,NAudio需要一些设备ID来更改活动设备。如何使用comboBox中的输入(设备名称)获取此ID?

1 个答案:

答案 0 :(得分:2)

如果您正在使用NAudio和WaveOut,您可以获得如下设备名称:

for (int deviceId = 0; deviceId < WaveOut.DeviceCount; deviceId++)
{
    var capabilities = WaveOut.GetCapabilities(deviceId);
    comboBoxWaveOutDevice.Items.Add(capabilities.ProductName);
}

唯一需要注意的是,旧的waveOut API不允许使用超过31个字符的产品名称,因此它们可能会被截断。如果这对您来说是一个问题,那么DirectSoundOut或WasapiOut可能是一个不错的选择。