2009-10-01 6 views
5

Sto tentando di utilizzare NAudio per creare un'applicazione di emissione audio multipla. Abbiamo 8 schede audio USB installate. NAudio mi consente di utilizzare tutti gli 8, ma non riesco a capire un modello per determinare quale indice di dispositivo è quale carta.Cosa determina l'ordine dei dispositivi audio in Windows quando si utilizza winmm.dll?

Le schede verranno collegate a hardware diversi, quindi è importante assicurarsi di sapere quale scheda si sta utilizzando.

Ho cercato di utilizzare WMI per eseguire il polling delle informazioni ma non riesco a individuare alcuna informazione che determina l'ordine dei dispositivi audio.

Aggiornamento: Ho dimenticato di includere alcune informazioni su questo problema. Le schede audio sono tutte schede audio USB collegate tramite un hub a 12 porte.

risposta

3

l'ordine dei dispositivi è non deterministico per tutte le versioni di Windows. Per Vista e sopra, i dispositivi sono in genere ordinati dal GUID DSound (più o meno) in modo che siano effettivamente casuali.

+0

Praticamente quello che stavo pensando, ma penso di avere un trucco per capirlo. –

1

Dai un'occhiata a questo articolo MSDN. Esso utilizza DirectSound per enumerare i dispositivi audio:

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

+0

Non ho ancora provato questo perché dovrei portare gli assembly DirectX nel codice. Proverò che questo è tutto il resto fallisce. –

2

Suppongo che tu stia utilizzando WaveOut? Puoi chiamare WaveOut.GetCapabilities (deviceNumber) per ottenere il nome del dispositivo, che potrebbe aiutarti.

+0

Funzionerebbe se non fossero tutte identiche schede audio USB. Mi spiace di non averlo menzionato prima. Grazie comunque. –

2

Questo è quello che ho inventato finora e funziona per noi.

Utilizzando WMI è possibile ottenere DeviceID da Win32_SoundDevice. Quindi, utilizzando questo, è possibile accedere al registro in HKLM \ SYSTEM \ CurrentControlSet \ ENUM \ 'DeviceID' e ottenere il valore di stringa denominato "Driver". Questo valore contiene 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 ordinarli suono, che è il ordina che i dispositivi siano elencati da NAudio con gli usi winmm.dll. C'è anche una posizione per questi dispositivi audio, sia nel registro della stessa chiave o da Win32_PNPEntity che utilizza il DeviceID.

Nel nostro caso la posizione ci consente di determinare quale porta dell'hub USB su cui è collegato il dispositivo audio.

Problemi correlati