WAV播放后C#SoundPlayer静态

时间:2012-05-22 00:10:45

标签: c# .net audio wav soundplayer

我正在使用此代码从资源播放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

2 个答案:

答案 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个测试过),我的时间也不值得。如果我得到一个,我会报告一个更好的答案。