2009-10-01 5 views
5

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

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

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

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

ответ

3

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

+0

Довольно много, о чем я думал, но я думаю, что у меня есть взлома, чтобы понять это. –

1

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

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

+0

Не пробовал это еще, потому что мне пришлось бы привести сборки DirectX в код. Я попробую, это все провалится. –

2

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

+0

Это будет работать, если они не все одинаковые звуковые карты USB. Извините, я не упоминал об этом раньше. Спасибо хоть. –

2

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

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

Пример: {4d36e96c-E325-11CE-BFC1-08002BE10318} \ 0015

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

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