我使用此代码从资源中播放 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"), ,它可以从文件中正确播放。

我想这与 UnmanagedMemoryStreamResources.Notify 是的,也许我需要先将其加载到托管流中?我知道如果不使用 PNG 文件就会出现问题 new Bitmap(Resource.MyPNG) 并尝试使用 Resource.MyPNG 直接代替,所以也许与 WAV 资源类似?

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

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

SoundPlayer sndPlayer = new SoundPlayer(Resources.Notify);
sndPlayer.Play(); 
有帮助吗?

解决方案 2

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

其他提示

这是MS使用的内部实现 我的音频播放(), ,看看他们如何实例化 SoundPlayer 类,他们利用了重载的构造函数 需要一个文件路径 如下所示 或一条流:

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 时传入流吗?

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top