Che cosa determina l'ordine per i dispositivi audio in Windows quando si utilizza winmm.dll?
Domanda
Sto cercando di utilizzare NAudio per creare un'applicazione uscita audio multipla. Abbiamo 8 schede audio USB installate. NAudio mi permette di usare tutte le 8, ma non riesco a capire un modello per determinare quale indice dispositivo è quale carta.
Le carte saranno agganciati su hardware diverso, quindi è importante assicurarsi di sapere quale carta che si sta utilizzando.
Ho cercato di utilizzare WMI per il polling per le informazioni, ma io non riesco a trovare alcuna informazione che determina l'ordine dei dispositivi audio.
Aggiornamento: Ho dimenticato di includere alcune informazioni su questo problema. Le schede audio sono tutte le schede audio USB collegati tramite un mozzo 12 porta.
Soluzione
L'ordine dei dispositivi è non deterministico per tutte le versioni di Windows. Per Vista e sopra, i dispositivi sono in genere disposte dal DSound GUID (più o meno) in modo che siano effettivamente casuale.
Altri suggerimenti
Sto assumendo che si sta utilizzando WaveOut? È possibile chiamare WaveOut.GetCapabilities (DeviceNumber) per entrare in possesso del nome del dispositivo, che potrebbe aiutarvi.
Questo è quello che sono venuto in mente finora e funziona per noi.
Utilizzando WMI è possibile ottenere il DeviceID da Win32_SoundDevice. Quindi, utilizzando che si può accedere al Registery in HKLM \ SYSTEM \ CurrentControlSet \ 'DeviceID' ENUM \ e ottenere il valore di stringa denominato "Driver". Questo valore contiene le ClassGUID più un numero alla fine.
Esempio: {4d36e96c-E325-11CE-BFC1-08002BE10318} \ 0015
Se si spogliano che ultimo numero * (15) * per tutti voi i dispositivi e l'ordine suono di loro, che è l'ordine che i dispositivi sono elencati dal NAudio con gli usi Winmm.dll. V'è anche un luogo per questi dispositivi audio, sia in Registery allo stesso tasto o dal Win32_PNPEntity utilizzando il DeviceID.
Nel nostro caso la posizione ci consente di determinare quale porta del hub USB che il suono dispositivo viene collegato.
Date un'occhiata a questo articolo di MSDN. Esso utilizza DirectSound per enumerare i dispositivi audio:
http://msdn.microsoft.com/ it-it / library / bb318674 (VS.85) aspx