是否有可靠的方法来防止声音池中的声音被截断?我在声音之间的 sleep() 函数上取得了一些成功,但它们有时仍然会在开始另一个声音之前错过最后一点声音。我的应用按顺序播放短声音。杰瑞
问问题
2566 次
2 回答
5
虽然这是一个老问题,但我想我会在这里发布一些东西,因为我在网上找不到这个问题的解决方案,但确实想出了一些解决方案......
当我的应用程序启动时,我得到每个声音的持续时间(使用 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 的工作对我来说很棒,但我不能保证其他任何事情。
于 2012-02-29T04:17:11.947 回答
3
确保您有足够的 Streams。在 SoundPool 构造函数中,第一个参数是 MaxStreams。将其设置为您认为合适的任何内容。我想 8 个左右应该就足够了……但你可能需要更多,这取决于你的声音。
于 2010-10-11T22:46:55.627 回答