2009-10-01 5 views
5

J'essaie d'utiliser NAudio pour créer une application de sortie sonore multiple. Nous avons 8 cartes son USB installées. NAudio me permet d'utiliser tous les 8 mais je n'arrive pas à trouver un modèle pour déterminer quel index de périphérique est quelle carte.Qu'est-ce qui détermine l'ordre des périphériques audio dans Windows lors de l'utilisation winmm.dll?

Les cartes seront connectées à différents matériels, il est donc important de vous assurer que vous savez quelle carte vous utilisez.

J'ai essayé d'utiliser WMI pour interroger l'information, mais je n'arrive pas à localiser les informations qui déterminent l'ordre des périphériques audio.

Mise à jour: J'ai oublié d'inclure des informations sur ce problème. Les cartes son sont toutes des cartes son USB reliées par un hub 12 ports.

Répondre

3

L'ordre des périphériques est non déterministe pour toutes les versions de Windows. Pour Vista et au-dessus, les périphériques sont généralement classés par le DSID GUID (plus ou moins) de sorte qu'ils sont effectivement aléatoires.

+0

À peu près ce que je pensais mais je pense que j'ai un hack pour le comprendre. –

1

Jetez un coup d'oeil à cet article MSDN. Il utilise DirectSound d'énumérer les périphériques audio:

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

+0

N'a pas encore essayé parce que je devrais apporter les assemblages DirectX dans le code. Je vais essayer c'est tout le reste échoue. –

2

Je suppose que vous utilisez WaveOut? Vous pouvez appeler WaveOut.GetCapabilities (deviceNumber) pour obtenir le nom de l'appareil, ce qui pourrait vous aider.

+0

Cela fonctionnerait si elles n'étaient pas toutes des cartes son USB identiques. Désolé, je n'ai pas mentionné cela avant. Merci quand même. –

2

C'est ce que j'ai trouvé jusqu'à présent et cela fonctionne pour nous.

En utilisant WMI, vous pouvez obtenir le DeviceID de Win32_SoundDevice. Ensuite, en utilisant cela, vous pouvez accéder à la registery à HKLM \ SYSTEM \ CurrentControlSet \ ENUM \ 'DeviceID' et obtenir la valeur de chaîne nommée "Driver". Cette valeur contient le ClassGUID plus un nombre à la fin.

Exemple: {4d36e96c-E325-11CE-BFC1-08002BE10318} \ 0015

Si vous enlevez ce dernier numéro * (15) * pour tous les appareils et vous le son pour eux, est le ordonne que les périphériques soient listés depuis NAudio avec les utilisations winmm.dll. Il existe également un emplacement pour ces périphériques audio, soit dans le registre de la même clé ou à partir de Win32_PNPEntity en utilisant le DeviceID.

Dans notre cas, l'emplacement nous permet de déterminer le port du concentrateur USB auquel le périphérique audio est branché.

Questions connexes