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 音池计时的主要内容,如果未能解决你的问题,请参考以下文章

android音池堆大小溢出

Android soundpool 循环逻辑

怎么在android里显示一个计时器

怎么在android悬浮窗口上实现倒计时?

Android中的倒计时实现

Android入门第22天-Android里的计时器Chronometer的使用