Lo que determina el orden de los dispositivos de sonido en las ventanas cuando se utiliza winmm.dll?

StackOverflow https://stackoverflow.com/questions/1505522

  •  19-09-2019
  •  | 
  •  

Pregunta

Estoy tratando de utilizar NAudio para crear una aplicación de salida de sonido múltiple. Contamos con 8 tarjetas de sonido USB instalados. NAudio me permite usar los 8 pero no puedo imaginar un patrón para determinar qué índice dispositivo es qué tarjeta.

Las tarjetas serán conectados a un hardware diferente por lo que es importante asegurarse de que sabe qué tarjeta que está utilizando.

He estado tratando de utilizar WMI para sondear la información, pero me parece que no puede localizar cualquier información que determina el orden de los dispositivos de sonido.

Actualización: Me olvidé de incluir alguna información sobre este problema. Las tarjetas de sonido son todas las tarjetas de sonido USB conectado a través de un hub de 12 puertos.

¿Fue útil?

Solución

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

Otros consejos

Estoy asumiendo que usted está utilizando WaveOut? Puede llamar WaveOut.GetCapabilities (DeviceNumber) de hacerse con el nombre del dispositivo, lo que podría ayudarle a cabo.

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

El uso de WMI se puede obtener el DeviceID de Win32_SoundDevice. Luego, utilizando que se puede acceder al registery en HKLM \ SYSTEM \ CurrentControlSet \ 'DeviceID' ENUM \ y obtener el valor de cadena denominado "controlador". Este valor contiene los 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 orden en que los dispositivos se enumeran de NAudio con los usos WINMM.DLL. También hay un lugar para estos dispositivos de sonido, ya sea en el registery en la misma clave o desde Win32_PNPEntity usando DeviceID.

En nuestro caso, la ubicación nos permite determinar qué puerto del concentrador USB que suene el dispositivo está conectado a.

Tener 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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top