0

我有一个非常简单的播放音效的方法:

private void PlaySound(string file){
   SoundPlayer sp = new SoundPlayer(@"Effects\" + file ' ".wav");
   sp.Play();

}

然后我这样做确实调用它:

播放声音(“音乐”);

现在,第一次调用 PlaySound("music") 时,它不会播放它。第二次和之后的所有其他时间都会。

关于这里出了什么问题的任何想法?

4

2 回答 2

1

尝试这个:

private void PlaySound(string file){
   using (SoundPlayer player = new SoundPlayer(@"Effects\" + file ' ".wav"))
    {
        // Use PlaySync to load and then play the sound.
        player.PlaySync();
    }
}

为什么使用 PlaySync?如果你只是在这个程序中调用 Play 方法,程序将在声音播放之前终止。同步表示程序应该在声音播放时暂停。

于 2012-11-20T16:51:45.393 回答
0

您需要在播放前调用load方法。如果文件尚未加载,则会通过调用Play来加载文件。这解释了为什么第一次没有播放文件。

如果您在 .wav 文件加载到内存之前调用 Play,则 .wav 文件将在播放开始之前加载。-MSDN

Load和PlaySync都会阻塞当前线程。更好的选择是使用LoadAsync异步加载文件。

于 2012-11-20T16:52:34.903 回答