Android 音池计时
Posted
技术标签:
【中文标题】Android 音池计时【英文标题】:Android soundpool timing 【发布时间】:2010-09-08 00:41:28 【问题描述】:是否有可靠的方法来防止声音池中的声音被截断?我在声音之间的 sleep() 函数上取得了一些成功,但它们有时仍然会在开始另一个声音之前错过最后一点声音。我的应用按顺序播放短声音。 杰瑞
【问题讨论】:
【参考方案1】:虽然这是一个老问题,但我想我会在这里发布一些东西,因为我在网上找不到解决这个问题的方法,但确实想出了一些解决方案......
当我的应用程序启动时,我获取每个声音的持续时间(使用 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 的工作对我来说很棒,但我不能保证其他任何事情。【讨论】:
在获得持续时间后不要忘记调用 player.release()。如果 MediaPlayer 实例事先被垃圾收集,您将收到错误消息。您可能还会遇到内存泄漏,但我不确定。【参考方案2】:确保您有足够的 Streams。 在 SoundPool 构造函数中,第一个参数是 MaxStreams。 将其设置为您认为合适的任何内容。我猜 8 个左右就足够了……但你可能需要更多,这取决于你的声音。
【讨论】:
以上是关于Android 音池计时的主要内容,如果未能解决你的问题,请参考以下文章