2011-04-13 156 views
6

我们目前正在开发一款使用XNA的游戏,而且我们偶然发现了一些问题。检查系统是否有声音C#

当系统没有插入声音设备(扬声器等 - 当Win7在扬声器图标上显示红色十字)时,尝试播放/加载声音时会崩溃。

因此,我们想检查系统是否具有输出声音的能力。在C#中可能吗?

回答

6

你确定它确实崩溃了,而不是简单地抛出未处理的异常?

理论上它应该抛出一个NoAudioHardwareException

试着做音频(SoundEffect.MasterVolume想到的可能性,因为它是一个静态方法),看看你是否能赶上例外。如果您确实发现了异常情况,则不要进行其他音频工作。

0

我认为这将有助于.........不由分说

[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

唯一代码的答案不倾向于是有益的。 – 2012-10-09 08:15:06

+0

我的Windows 7系统上没有在winmm.dll中看到原始'GetNumDevs'。你的意思是[waveOutGetNumDevs](http://msdn.microsoft.com/en-us/library/windows/desktop/dd743860.aspx)?你真的是指'CharSet.Ansi'吗?这几乎总是不是最好的选择,而AFAICS无论如何都没有字符串。 – Rup 2012-10-09 08:44:20