我正在使用此代码从资源播放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:WINDOWSMediading.wav
(在Windows XP上(复制的文件,它在Windows Media Player中播放良好。 另外,如果我使用新SoundPlayer("c:WINDOWSMediading.wav")
,它会从文件中正确播放。
我想这与Resources.Notify
UnmanagedMemoryStream
有关,也许我需要先将其加载到托管流中? 我知道如果我不使用 new Bitmap(Resource.MyPNG)
并尝试直接使用 Resource.MyPNG
,我在 PNG 文件方面遇到了问题,所以也许 WAV 资源类似?
更新 :我最初认为每次播放声音时都会发生这种情况,但现在看来它只发生在我第一次在我的应用程序中播放声音时。 所以也许需要做一些初始化?
我也试过这个,同样的问题:
SoundPlayer sndPlayer = new SoundPlayer(Resources.Notify);
sndPlayer.Play();
这是 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 台(上,不值得我花时间。 如果我得到一个更好的答案,会报告一个更好的答案。