Получить список аудиоустройств и выбрать одно с помощью c # - PullRequest
3 голосов
/ 23 марта 2011

Привет! Я создаю настольное приложение в Windows, используя C #.

Я должен показать список всех доступных аудио и видео устройств в 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 ]

2 голосов
/ 13 июля 2016

Я слишком поздно отвечаю на этот вопрос ... но это может быть полезно для других.

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

НТН.

2 голосов
/ 23 марта 2011
  1. Нет документированного механизма для изменения аудиоустройства по умолчанию.
  2. Это потому, что вы перечисляете физические аудиоустройства, а не конечные точки аудио.
  3. Вы хотите использовать API IMMDeviceEnumerator для перечисления конечных точек аудио (динамики и т. Д.).

К сожалению, Microsoft не публикует управляемого взаимодействия для API IMMDeviceEnumerator, вам нужно определить свое собственное (в Интернете доступно несколько определений).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...