winforms 播放Windows错误声音而不是音乐

soat7uwm  于 2023-05-18  发布在  Windows
关注(0)|答案(2)|浏览(211)

我有一个小代码应该在背景中播放音乐。问题是音乐不播放,但播放了Windows错误的声音。

System.Reflection.Assembly assembly = System.Reflection.Assembly.GetExecutingAssembly();
System.IO.Stream resStream =
    assembly.GetManifestResourceStream(@"SuperJenya.horror_music.wav");
SoundPlayer player = new SoundPlayer(resStream);
player.PlayLooping();
player.PlaySync();
xdnvmnnf

xdnvmnnf1#

SoundPlayer.PlaySync Method没有指定或无法加载.wav文件

PlaySync方法使用当前线程播放.wav文件,防止线程在加载完成之前处理其他消息。从流或URL成功加载.wav文件后,在声音路径更改之前,对SoundPlayer的播放方法的后续调用将不需要重新加载.wav文件。
如果未指定或无法加载.wav文件,PlaySync方法将播放默认的蜂鸣声。所以它似乎很符合你说的关于正在播放的Windows错误声音。SoundPlayer.PlayLooping也有同样的问题。
可以使用LoadAsync或Load方法提前将.wav文件加载到内存中。或者直接使用Play方法
当然,如果这仍然不起作用,也不排除你的wav文件有问题。

还有以下建议:

1.如果上述操作都不起作用,也可以使用JetPlayer。因为SoundPool最大只能申请1M的内存空间,这意味着我们只能使用一些非常短的声音片段,而不能用它来播放歌曲或游戏背景音乐。

  1. SoundPool提供了暂停和停止方法,但建议不要轻易使用这些方法,因为有时它们可能会导致您的程序莫名其妙地终止。也有朋友反映,他们不会立即停止播放声音,而是在播放缓冲区中的数据后停止播放,可能会多播放一秒。
    1.音频格式建议使用OGG格式。使用WAV格式音频文件存储游戏音效。经过反复测试,当音效播放间隔较短时,会异常关闭(据说SoundPool目前只支持16bit WAV文件)。后来,文件被转换成OGG格式,问题就解决了。
7cwmlq89

7cwmlq892#

System.Reflection.Assembly assembly = System.Reflection.Assembly.GetExecutingAssembly();
System.IO.Stream resStream = assembly.GetManifestResourceStream("YourNamespace.SuperJenya.horror_music.wav");
if(resStream != null)
{ using (var player = new System.Media.SoundPlayer(resStream)) 
  {`player.PlayLooping();
    player.PlaySync();`
  }
} else { // Resource not found, handle the error accordingly }

相关问题