C# SoundPlayer 在 WAV 播放后静态
-
12-12-2019 - |
题
我使用此代码从资源中播放 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")
, ,它可以从文件中正确播放。
我想这与 UnmanagedMemoryStream
那 Resources.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 时传入流吗?