2009-10-01 8 views
5

Próbuję użyć NAudio, aby utworzyć aplikację z wieloma wyjściami dźwiękowymi. Mamy zainstalowane 8 kart dźwiękowych USB. NAudio pozwala mi korzystać ze wszystkich 8, ale nie mogę znaleźć schematu do określenia, który indeks urządzenia jest jaką kartą.Co decyduje o kolejności urządzeń dźwiękowych w Windows podczas korzystania z Winmm.dll?

Karty zostaną podłączone do różnych urządzeń, dlatego ważne jest, aby upewnić się, że wiesz, z której karty korzystasz.

Próbowałem użyć WMI do sondowania informacji, ale nie mogę zlokalizować żadnych informacji, które określają kolejność urządzeń dźwiękowych.

Aktualizacja: Zapomniałem podać niektóre informacje na temat tego problemu. Karty dźwiękowe to wszystkie karty dźwiękowe USB podłączone przez 12-portowy koncentrator.

Odpowiedz

3

Kolejność urządzeń nie jest deterministyczny dla wszystkich wersji systemu Windows. W przypadku systemu Vista i nowszych urządzeń są zwykle sortowane przez identyfikator GUID DSID (mniej więcej lub mniej), dzięki czemu są efektywnie losowe.

+0

Prawie to, co myślałem, ale myślę, że mam hack, aby to rozgryźć. –

2

Zakładam, że używasz WaveOut? Możesz wywołać WaveOut.GetCapabilities (numer urządzenia), aby uzyskać nazwę urządzenia, co może ci pomóc.

+0

To działałoby, gdyby nie były identyczne karty dźwiękowe USB. Przepraszam, że wcześniej o tym nie wspominałem. W każdym razie dzięki. –

2

Oto, do czego do tej pory doszedłem i działa dla nas.

Za pomocą usługi WMI można pobrać identyfikator DeviceID z klasy Win32_SoundDevice. Następnie za pomocą tego można uzyskać dostęp do rejestru w HKLM \ SYSTEM \ CurrentControlSet \ ENUM \ 'DeviceID' i uzyskać wartość ciągu o nazwie "Sterownik". Ta wartość zawiera identyfikator ClassGUID plus numer na końcu.

Przykład: {4d36e96c-E325-11CE-BFC1-08002BE10318} \ 0015

Jeśli odpędzenia że ostatni numer * (15) * dla wszystkich, urządzenia oraz kolejność ich dźwięk, to jest kolejność, w której urządzenia są wymienione w NAudio, używa winmm.dll. Istnieje również lokalizacja dla tych urządzeń dźwiękowych, albo w rejestrze na tym samym kluczu, albo z Win32_PNPEntity przy użyciu DeviceID.

W naszym przypadku lokalizacja pozwala nam określić port koncentratora USB, do którego podłączone jest urządzenie dźwiękowe.

Powiązane problemy