获取音频设备列表并使用c#选择一个

时间:2011-03-23 13:05:36

标签: c# windows audio

您好我正在使用C#在Windows中创建基于桌面的应用程序。

我必须显示所有可用音频的列表& 2个不同组合框中的视频设备。 从组合框中选择任何设备会将该特定设备设置为默认设备

我正在使用WMI。

获取可用音频设备列表的代码:

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

foreach (ManagementObject soundDevice in mo.Get())
{
     String deviceId = soundDevice.GetPropertyValue("DeviceId").ToString();
     String name  = soundDevice.GetPropertyValue("Name").ToString();

  //saving the name  and device id in array
} 

如果我尝试像这样设置设备:

 using (RegistryKey audioDeviceKey = 
Registry.LocalMachine.OpenSubKey(audioDevicesReg
   + @"\" + audioDeviceList.SelectedText.ToString(), true)){}

我得到例外:

System.Security.SecurityException occurred in mscorlib.dll

现在我几乎没有问题:

1) How to set the selected device as the default audio device?
2) The array contains device name as : "High Definition audio device" 
even when I have attached a headset.
3) I want the list as speaker,headset etc...How to get that?

任何人都能指出我正确的方向吗?

2 个答案:

答案 0 :(得分:2)

  1. 没有用于更改默认音频设备的文档化机制。
  2. 那是因为你要枚举物理音频设备,而不是音频端点。
  3. 您希望使用IMMDeviceEnumerator API枚举音频端点(扬声器等)。
  4. 不幸的是,Microsoft没有为IMMDeviceEnumerator API发布托管互操作,您需要自己定义(互联网上有几个定义)。

答案 1 :(得分:2)

我对这个问题的回答太迟了......但对其他人来说可能会有所帮助。

Lync 2013 SDK提供了DeviceManager类,列出了集合中的所有音频和视频设备

LyncClient.GetClient().DeviceManager.AudioDevices枚举系统中的所有音频设备

LyncClient.GetClient().DeviceManager.VideoDevices枚举系统中的所有视频设备

因此,可以将设备设置为:

LyncClient client = LyncClient.GetClient();
DeviceManager dm = client.DeviceManager;

dm.ActiveAudioDevice = (AudioDevice)dm.AudioDevices[0]; //or any other found after foreach
dm.ActiveVideoDevice = (VideoDevice)dm.VideoDevices[0]; //or any other found after foreach

HTH。