2011-04-13 17 views
6

Actualmente estamos desarrollando un juego con XNA y hemos tropezado con un pequeño problema de sonido.Comprueba si el sistema tiene sonido C#

Cuando un sistema no tiene un dispositivo de sonido enchufado (altavoces, etc.) cuando Win7 muestra una cruz roja en el icono del altavoz, se bloquea al intentar reproducir/cargar el sonido.

Por lo tanto, nos gustaría verificar si el sistema tiene la capacidad de emitir sonido. ¿Es posible en C#?

Respuesta

6

¿Estás seguro de que en realidad se está bloqueando y no solo lanzando una excepción no controlada?

En teoría, debería arrojar un NoAudioHardwareException.

Intenta hacer algo con el audio (SoundEffect.MasterVolume viene a la mente como una posibilidad, ya que es un método estático) y mira si puedes ver la excepción. Si atrapa una excepción, simplemente no haga más trabajo de audio.

0

Creo que esto ayuda .........

[DllImport("winmm.dll", CharSet = CharSet.Ansi, SetLastError = true, ExactSpelling = true)] 
public static extern long GetNumDevs(); 
private void Button1_Click(System.Object sender, System.EventArgs e) 
{ 
    long I = 0; 
    I = GetNumDevs(); 
    if (I > 0) { 
     Interaction.MsgBox("Your system can play sound files."); 
    } else { 
     Interaction.MsgBox("Your system can not play sound files."); 
    } 
} 
+0

respuestas de sólo código sin ninguna explicación no tienden a ser de ayuda en absoluto. –

+0

No veo un 'GetNumDevs' puro en winmm.dll en mi sistema Windows 7. ¿Quiso decir [waveOutGetNumDevs] (http://msdn.microsoft.com/en-us/library/windows/desktop/dd743860.aspx)? ¿Y realmente quieres decir 'CharSet.Ansi' ?? Eso casi siempre no es la mejor opción, y AFAICS no hay ninguna cuerda aquí de todos modos. – Rup

Cuestiones relacionadas