Что определяет порядок для звуковых устройств в Windows при использовании winmm.dll?
Вопрос
Я пытаюсь использовать NAudio для создания приложения с несколькими режимами вывода звука.У нас установлено 8 звуковых карт USB.NAudio позволяет мне использовать все 8, но я не могу найти шаблон для определения, какой индекс устройства соответствует какой карте.
Карты будут подключены к другому оборудованию, поэтому важно убедиться, что вы знаете, какую карту используете.
Я пытался использовать WMI для опроса информации, но, похоже, я не могу найти никакой информации, которая определяет порядок звуковых устройств.
Обновить: Я забыл включить некоторую информацию об этой проблеме.Все звуковые карты представляют собой звуковые карты USB, подключенные через 12-портовый концентратор.
Решение
Порядок устройств не является детерминированным для всех версий Windows.Для Vista и выше устройства обычно упорядочиваются по идентификатору GUID DSound (более или менее), поэтому они фактически случайны.
Другие советы
Я предполагаю, что вы используете WaveOut?Вы можете вызвать WaveOut.Получите Capabilities(DeviceNumber), чтобы узнать название устройства, которое может вам помочь.
Это то, что я придумал до сих пор, и это работает для нас.
Используя 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-концентратора подключено это звуковое устройство.
Взгляните на эту статью MSDN.Он использует DirectSound для перечисления аудиоустройств:
http://msdn.microsoft.com/en-us/library/bb318674 (ПРОТИВ 85).aspx