我使用这段代码从资源中播放WAV文件,并且音频播放正确,但是在播放之后,我得到了一个简短的静态(大约1/2秒):
//System.Media.SystemSounds.Beep.Play();
SoundPlayer sndPlayer = new SoundPlayer();
sndPlayer.Stream = Resources.Notify;
sndPlayer.Play();如果我取消对上面的System.Media.SystemSounds.Beep.Play()行的注释,那么我的资源中的beep和Notify声音都会正确播放,并且不会是静态的。我尝试过以上代码的几个不同的变体,并且总是得到静态的。我试着使所有变量都是静态的,以防与早期垃圾收集有关,但这并没有帮助。
WAV文件只是我从c:\WINDOWS\Media\ding.wav复制的一个文件(在Windows上),它在Windows中播放得很好。此外,如果我使用新的SoundPlayer("c:\WINDOWS\Media\ding.wav"),它将正确地从文件中播放。
我想这与UnmanagedMemoryStream是Resources.Notify有关,也许我需要先将它加载到托管流中?我知道,如果我不使用new Bitmap(Resource.MyPNG)并尝试直接使用Resource.MyPNG,那么可能与WAV资源类似吗?
更新:我最初以为每次播放声音时都会发生这种情况,但现在看来只有在我第一次在应用程序中播放声音时才会发生这种情况。所以也许需要做一些初始化工作?
我也尝试过同样的问题:
SoundPlayer sndPlayer = new SoundPlayer(Resources.Notify);
sndPlayer.Play(); 发布于 2012-05-29 15:28:59
只是一台电脑上的一个问题。从来没有发现,其他应用程序似乎没有这个问题,但不值得我的时间,如果只是在1个人电脑(可能15测试)到目前为止。如果我能得到一个更好的答案。
发布于 2012-05-22 00:39:36
这是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时,您能尝试传入流吗?
https://stackoverflow.com/questions/10694220
复制相似问题