【问题标题】:Check if system has sound C#检查系统是否有声音 C#
【发布时间】:2011-04-13 13:18:23
【问题描述】:

我们目前正在使用 XNA 开发游戏,但偶然发现了一点声音问题。

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

所以,我们想检查一下系统是否有输出声音的能力。在 C# 中可以吗?

【问题讨论】:

    标签: c# xna audio


    【解决方案1】:

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

    理论上它应该抛出一个NoAudioHardwareException

    尝试用音频做一些事情(SoundEffect.MasterVolume 是一种可能性,因为它是一个静态方法),看看你是否能捕捉到异常。如果您确实捕获了异常,则无需进行进一步的音频工作。

    【讨论】:

      【解决方案2】:

      我认为这会有所帮助............

      [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.");
          }
      }
      

      【讨论】:

      • 没有任何解释的纯代码答案往往没有任何帮助。
      • 我在 Windows 7 系统上的 winmm.dll 中没有看到原始的 GetNumDevs。你的意思是waveOutGetNumDevs?你真的是说CharSet.Ansi??这几乎总是不是最好的选择,而且 AFAICS 无论如何这里都没有字符串。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-27
      • 1970-01-01
      • 2012-08-16
      相关资源
      最近更新 更多