我有一个小代码应该在背景中播放音乐。问题是音乐不播放,但播放了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();
2条答案
按热度按时间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.音频格式建议使用OGG格式。使用WAV格式音频文件存储游戏音效。经过反复测试,当音效播放间隔较短时,会异常关闭(据说SoundPool目前只支持16bit WAV文件)。后来,文件被转换成OGG格式,问题就解决了。
7cwmlq892#