2009-10-01 8 views
5

Estoy tratando de usar NAudio para crear una aplicación de salida de sonido múltiple. Tenemos 8 tarjetas de sonido USB instaladas. NAudio me permite usar los 8 pero no puedo encontrar un patrón para determinar qué índice de dispositivo es qué tarjeta.¿Qué determina el orden de los dispositivos de sonido en windows cuando se usa winmm.dll?

Las tarjetas se conectarán a un hardware diferente, por lo que es importante asegurarse de saber qué tarjeta está utilizando.

He estado tratando de usar WMI para sondear la información pero parece que no puedo encontrar ninguna información que determine el orden de los dispositivos de sonido.

Actualización: Olvidé incluir algo de información sobre este problema. Las tarjetas de sonido son todas tarjetas de sonido USB conectadas a través de un concentrador de 12 puertos.

Respuesta

3

El orden de los dispositivos es no determinista para todas las versiones de Windows. Para Vista y versiones superiores, los dispositivos están generalmente ordenados por el GUID de DSound (más o menos) por lo que son efectivamente aleatorios.

+0

Más o menos lo que estaba pensando, pero creo que tengo un truco para resolverlo. –

1

Eche un vistazo a este artículo de MSDN. Se utiliza DirectSound para enumerar los dispositivos de audio:

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

+0

No he intentado esto todavía porque tendría que llevar los ensamblados de DirectX al código. Voy a intentar esto es todo lo demás falla. –

2

Supongo que está utilizando WaveOut? Puede llamar a WaveOut.GetCapabilities (deviceNumber) para obtener el nombre del dispositivo, lo que podría ayudarlo.

+0

Esto funcionaría si no fueran todas tarjetas de sonido USB idénticas. Perdón, no lo mencioné antes. Gracias sin embargo. –

2

Esto es lo que he encontrado hasta ahora y funciona para nosotros.

Usando WMI puede obtener el DeviceID desde Win32_SoundDevice. Luego usando eso, puede acceder al registro en HKLM \ SYSTEM \ CurrentControlSet \ ENUM \ 'DeviceID' y obtener el valor de la cadena llamado "Driver". Este valor contiene el ClassGUID más un número al final.

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

Si eliminase ese último número * (15) * para todos ustedes los dispositivos de sonido y para ellos, que es el ordene que los dispositivos estén listados de NAudio con winmm.dll. También hay una ubicación para estos dispositivos de sonido, ya sea en el registro en la misma clave o desde Win32_PNPEntity usando el DeviceID.

En nuestro caso, la ubicación nos permite determinar a qué puerto del concentrador USB está conectado ese dispositivo de sonido.

Cuestiones relacionadas