От чего зависит порядок работы звуковых устройств в windows при использовании winmm.dll? - PullRequest
5 голосов
/ 01 октября 2009

Я пытаюсь использовать NAudio для создания приложения с несколькими звуковыми выходами. У нас установлено 8 звуковых карт USB. NAudio позволяет мне использовать все 8, но я не могу определить шаблон для определения, какой индекс устройства является какой картой.

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

Я пытался использовать WMI для опроса информации, но я не могу найти какую-либо информацию, которая определяет порядок звуковых устройств.

Обновление: Я забыл включить некоторую информацию об этой проблеме. Все звуковые карты - это звуковые карты USB, подключенные через 12-портовый концентратор.

Ответы [ 4 ]

3 голосов
/ 02 октября 2009

Порядок устройств не является детерминированным для всех версий Windows. Для Vista и выше устройства обычно упорядочиваются по GUID DSound (более или менее), поэтому они фактически случайны.

2 голосов
/ 02 октября 2009

Это то, что я придумал до сих пор, и это работает для нас.

Используя WMI, вы можете получить DeviceID из Win32_SoundDevice. Затем, используя это, вы можете получить доступ к реестру в HKLM \ SYSTEM \ CurrentControlSet \ ENUM \ 'DeviceID' и получить строковое значение с именем «Driver». Это значение содержит ClassGUID плюс число в конце.

Пример: {4d36e96c-e325-11ce-bfc1-08002be10318} \ 0015

Если вы удалите это последнее число * (15) * для всех звуковых устройств и закажете их, это порядок, в котором устройства перечислены в NAudio с использованием winmm.dll. Существует также место для этих звуковых устройств, либо в реестре с тем же ключом, либо из Win32_PNPEntity с использованием DeviceID.

В нашем случае местоположение позволяет нам определить, к какому порту USB-концентратора подключено звуковое устройство.

2 голосов
/ 02 октября 2009

Я предполагаю, что вы используете WaveOut? Вы можете вызвать WaveOut.GetCapabilities (deviceNumber), чтобы узнать имя устройства, которое может вам помочь.

1 голос
/ 01 октября 2009

Посмотрите на эту статью MSDN. Он использует DirectSound для перечисления аудиоустройств:

http://msdn.microsoft.com/en-us/library/bb318674(VS.85).aspx

...