【发布时间】:2011-04-13 13:18:23
【问题描述】:
我们目前正在使用 XNA 开发游戏,但偶然发现了一点声音问题。
当系统没有插入声音设备(扬声器等——当 Win7 在扬声器图标上显示红色叉号时)时,它会在尝试播放/加载声音时崩溃。
所以,我们想检查一下系统是否有输出声音的能力。在 C# 中可以吗?
【问题讨论】:
我们目前正在使用 XNA 开发游戏,但偶然发现了一点声音问题。
当系统没有插入声音设备(扬声器等——当 Win7 在扬声器图标上显示红色叉号时)时,它会在尝试播放/加载声音时崩溃。
所以,我们想检查一下系统是否有输出声音的能力。在 C# 中可以吗?
【问题讨论】:
您确定它确实在崩溃,而不是简单地抛出未处理的异常吗?
理论上它应该抛出一个NoAudioHardwareException。
尝试用音频做一些事情(SoundEffect.MasterVolume 是一种可能性,因为它是一个静态方法),看看你是否能捕捉到异常。如果您确实捕获了异常,则无需进行进一步的音频工作。
【讨论】:
我认为这会有所帮助............
[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.");
}
}
【讨论】:
GetNumDevs。你的意思是waveOutGetNumDevs?你真的是说CharSet.Ansi??这几乎总是不是最好的选择,而且 AFAICS 无论如何这里都没有字符串。