从数组播放声音会返回错误 C# - Visual Studio

Posted

技术标签:

【中文标题】从数组播放声音会返回错误 C# - Visual Studio【英文标题】:Playing a sound from an array returns an error C# - Visual Studio 【发布时间】:2016-04-26 14:45:02 【问题描述】:

所以我在 Visual Studio 中有一个使用 C# 的 Windows 窗体应用程序,并且我有三个数组:

    System.Media.SoundPlayer[] keyClick = new System.Media.SoundPlayer[4];
    System.Media.SoundPlayer[] spaceClick = new System.Media.SoundPlayer[2];
    System.Media.SoundPlayer[] enterClick = new System.Media.SoundPlayer[1];

在程序初始化时设置为包含某些声音文件:

        private void textIn_Enter(object sender, EventArgs e)
    
        for(int i = 0; i < 4; i++)
        
            keyClick[i] = new System.Media.SoundPlayer(@"C:\Users\brain\OneDrive\Documents\Visual Studio 2015\Projects\TextAdventure\TextAdventure\Assets\keyClick" + i + ".wav");
        

        for (int i = 0; i < 2; i++)
        
            keyClick[i] = new System.Media.SoundPlayer(@"C:\Users\brain\OneDrive\Documents\Visual Studio 2015\Projects\TextAdventure\TextAdventure\Assets\spaceClick" + i + ".wav");
        

        for (int i = 0; i < 1; i++)
        
            keyClick[i] = new System.Media.SoundPlayer(@"C:\Users\brain\OneDrive\Documents\Visual Studio 2015\Projects\TextAdventure\TextAdventure\Assets\enterClick" + i + ".wav");
        
    

现在,例如 keyClick 包含 keyClick1.wav 到 keyClick5.wav。当按下某个键时,程序会在特定数组的随机索引处播放一个项目:

keyClick[randomizer.Next(0, 4)].Play();

所以我写的第一个是上面那个工作正常,但是我为从 spaceKey 数组播放的空格键添加了一个命令:

spaceClick[randomizer.Next(0, 2)].Play();

但是,这以及从 enterClick 数组播放都会返回错误:

“'System.NullReferenceException' 类型的未处理异常 发生在TextAdventure.exe中

附加信息:对象引用未设置为 对象。”

我不知道如何解决这个问题,据我所知,它应该与从 keyClick 播放完全相同,但事实并非如此。有谁知道如何解决这个问题?

【问题讨论】:

【参考方案1】:

问题是你在哪里填充数组,你只是在填充 keyClick。

这是填充空间的循环点击

for (int i = 0; i < 2; i++)

    keyClick[i] = new System.Media.SoundPlayer(@"C:\Users\brain\OneDrive\Documents\Visual Studio 2015\Projects\TextAdventure\TextAdventure\Assets\spaceClick" + i + ".wav");

您正在设置keyClick[i],因此覆盖上一个循环中已经存在的那些。应该改成这个

for (int i = 0; i < 2; i++)

    spaceClick[i] = new System.Media.SoundPlayer(@"C:\Users\brain\OneDrive\Documents\Visual Studio 2015\Projects\TextAdventure\TextAdventure\Assets\spaceClick" + i + ".wav");

您的第三个循环也成为同一问题的受害者,应相应更改

【讨论】:

啊,非常感谢,我不敢相信我错过了这么明显的错误 :)

以上是关于从数组播放声音会返回错误 C# - Visual Studio的主要内容,如果未能解决你的问题,请参考以下文章

如何在c#中播放特定的Windows错误声音[重复]

在 C# 中播放声音更有效

使用 c# wpf 从资源文件播放声音

C# 使用 SoundPlayer 同时发出多个声音

如何在 C# 中同时播放多个声音?

同时播放两个声音c#