有没有可靠的方法来防止声音池中的声音被截断?我在声音之间使用 sleep() 函数取得了一些成功,但有时它们仍然会在开始另一个声音之前错过最后一点声音。我的应用程序按顺序播放短声音。
杰瑞
虽然这是一个老问题,但我想我应该在这里发布一些东西,因为我在网上找不到这个问题的解决方案,但确实提出了一些解决方案......
当我的应用程序启动时,我获取每个声音的持续时间(使用 MediaPlayer),并将 R.id.sound_name 值和持续时间存储在一起。然后我可以使用 SoundPool 播放声音。
获取持续时间的代码:
private long getSoundDuration(int rawId){
MediaPlayer player = MediaPlayer.create(context, rawId);
int duration = player.getDuration();
return duration;
}
在我的声音课上,我会像往常一样播放声音,然后在这段时间里睡觉。很简单的东西。
看起来效果不错。为我提供了 SoundPool 的低延迟优势以及链接事物的能力。
有几点需要注意:
- 不要每次都获取持续时间,因为创建 MediaPlayer 会产生开销。
- 持续时间取自文件元数据——ogg 的工作对我来说非常有用,但我不能保证其他任何事情。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)