Sí, hay una solución. He resuelto este problema varias veces en el código de envío.
Enumerar dispositivos de captura de audio con DirectSoundCapture. La API es DirectSoundCaptureEnumerate. Le devolverá el nombre completo de los dispositivos.
Por supuesto, probablemente esté pensando: "Eso es genial, pero el resto de mi código está configurado para usar Wave API, no DirectSound. No quiero cambiarlo todo. Entonces, ¿cómo puedo mapear el ID de GUID devuelto por DirectSoundCaptureEnumerate a los ID enteros utilizados por la API de WaveIn? "
La solución es CoCreateInstance para el objeto DirectSoundPrivate (o llame a GetClassObject directamente desde dsound.dll) para obtener un puntero a una interfaz IKsPropertySet. Desde esta interfaz, puede obtener el GUID de DSound para la asignación de ID de onda. Para más detalles ver esta página web:
http://msdn.microsoft.com/en-us/library/bb206182(VS.85).aspx
Usted desea utilizar el DSPROPERTY_DIRECTSOUNDDEVICE_WAVEDEVICEMAPPING como se describe en la página web que aparece arriba.
gracias, esto es realmente útil (aunque es una pena que tiene que ser tan complicado) –
que vinculan parece estar roto . ¿Tienes otro enlace o al menos el título del artículo sobre msdn? –
Otro método para obtener el GUID es llamar a waveOutGetDevCaps con una estructura WAVEOUTCAPS2, en lugar de la estructura WAVEOUTCAPS regular. http://msdn.microsoft.com/en-us/library/windows/hardware/ff536382%28v=vs.85%29.aspx – leiflundgren