C# SoundPlayer 在 WAV 播放后静态

本文关键字:静态 播放 WAV SoundPlayer | 更新日期: 2023-09-27 18:34:49

我正在使用此代码从资源播放WAV文件,并且音频可以正确播放,但是在播放后(大约1/2秒(我得到了短暂的静态爆炸:

//System.Media.SystemSounds.Beep.Play();
SoundPlayer sndPlayer = new SoundPlayer();
sndPlayer.Stream = Resources.Notify;
sndPlayer.Play();

如果我取消注释上面的System.Media.SystemSounds.Beep.Play()行,那么来自我的资源的哔哔声和通知声音都可以正常播放,并且没有静电。 我已经尝试了上述代码的几种不同变体,并且总是得到静态的。 我尝试将所有变量设为静态,以防万一与早期垃圾收集有关,但这没有帮助。

WAV文件只是我从c:'WINDOWS'Media'ding.wav(在Windows XP上(复制的文件,它在Windows Media Player中播放良好。 另外,如果我使用新SoundPlayer("c:'WINDOWS'Media'ding.wav"),它会从文件中正确播放。

我想这与Resources.Notify UnmanagedMemoryStream有关,也许我需要先将其加载到托管流中? 我知道如果我不使用 new Bitmap(Resource.MyPNG) 并尝试直接使用 Resource.MyPNG,我在 PNG 文件方面遇到了问题,所以也许 WAV 资源类似?

更新 :我最初认为每次播放声音时都会发生这种情况,但现在看来它只发生在我第一次在我的应用程序中播放声音时。 所以也许需要做一些初始化?

我也试过这个,同样的问题:

SoundPlayer sndPlayer = new SoundPlayer(Resources.Notify);
sndPlayer.Play(); 

C# SoundPlayer 在 WAV 播放后静态

这是 MS 使用 My.Audio.Play(( 的内部实现,看看它们如何实例化 SoundPlayer 类,它们利用了重载的构造函数,该构造函数采用如下所示的 filePath或流

http://msdn.microsoft.com/en-us/library/system.media.soundplayer.aspx

public void Play(string location, AudioPlayMode playMode)
{
    this.ValidateAudioPlayModeEnum(playMode, "playMode");
    SoundPlayer sound = new SoundPlayer(this.ValidateFilename(location));
    this.Play(sound, playMode);
}

您可以在实例化 SoundPlayer 时尝试传入流吗?

只是一台 PC 上的问题。 从来没有弄清楚,其他应用程序似乎没有这个问题,但如果到目前为止只在 1 台 PC(可能测试了 15 台(上,不值得我花时间。 如果我得到一个更好的答案,会报告一个更好的答案。