我正在使用此代码从资源播放WAV文件,并且音频播放正确,但是在播放后我会得到一小段静态(大约1/2秒):
//System.Media.SystemSounds.Beep.Play();
SoundPlayer sndPlayer = new SoundPlayer();
sndPlayer.Stream = Resources.Notify;
sndPlayer.Play();
如果我取消注释上面的System.Media.SystemSounds.Beep.Play()
行,那么来自我的资源的蜂鸣声和Notify声音都能正常播放,而且没有静态。我已经尝试了上面代码的一些不同变体,并且始终获得静态。我尝试将所有变量设置为静态,因为有一些与早期垃圾收集相关的东西,但这没有帮助。
WAV文件只是我从c:\WINDOWS\Media\ding.wav
(在Windows XP上)复制的文件,它可以在Windows Media Player中正常播放。另外,如果我使用新的SoundPlayer("c:\WINDOWS\Media\ding.wav")
,它会从文件中正确播放。
我认为它与UnmanagedMemoryStream
的{{1}}有关,也许我需要先将其加载到托管流中?我知道如果我不使用Resources.Notify
并尝试直接使用new Bitmap(Resource.MyPNG)
,那么PNG文件就会出现问题,所以可能与WAV资源类似吗?
更新:我原本以为每次播放声音都会发生这种情况,但现在看来它只是在我第一次在我的应用中播放声音时才会发生。那么可能需要进行一些初始化吗?
我也试过这个,同样的问题:
Resource.MyPNG
答案 0 :(得分:0)
这是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时尝试传入流吗?
答案 1 :(得分:0)
只是一台PC上的问题。从来没有弄明白,其他应用程序似乎没有这个问题,但是到目前为止,如果只有1台PC(可能是15个测试过),我的时间也不值得。如果我得到一个,我会报告一个更好的答案。