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

问题描述 投票:0回答:2

我有一些应该在后台播放音乐的代码。问题是音乐没有播放,但是播放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();
c# visual-studio winforms audio wav
2个回答
0
投票
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 }

0
投票

SoundPlayer.PlaySync 方法 未指定或无法加载 .wav 文件

PlaySync 方法使用当前线程播放.wav 文件,防止线程在加载完成之前处理其他消息。从流或 URL 成功加载 .wav 文件后,后续调用 SoundPlayer 的播放方法将不需要重新加载 .wav 文件,直到声音的路径发生变化。

如果未指定或无法加载.wav 文件,PlaySync 方法将播放默认的蜂鸣声。所以它似乎很符合你所说的关于正在播放的 Windows 错误声音。 SoundPlayer.PlayLooping 也有同样的问题

可以使用 LoadAsync 或 Load 方法提前将 .wav 文件加载到内存中。或者直接使用Play方法

当然,如果这样还是不行,不排除你的wav文件有问题

还有以下建议:

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

  2. SoundPool 提供了pause 和stop 方法,但是这些方法建议不要轻易使用,因为有时它们可能会导致你的程序莫名其妙地终止。也有小伙伴反映不会立即停止播放声音,而是播放完缓冲区中的数据后停止,可能会多播放一秒

  3. 音频格式推荐使用OGG格式。使用 WAV 格式的音频文件来存储游戏音效。经过反复测试,当音效播放间隔较短时,会异常关闭(据说SoundPool目前只支持16bit的WAV文件)。后来把文件转成OGG格式,问题就解决了

© www.soinside.com 2019 - 2024. All rights reserved.