0

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 来更改活动设备。如何使用来自组合框的输入(设备名称)获取此 ID?

4

1 回答 1

3

如果您使用 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 可能是一个不错的选择。

于 2013-09-22T19:16:15.077 回答