Android 音池计时

标签 android soundpool

是否有可靠的方法来防止声音池中的声音被截断?我在声音之间的 sleep() 函数上取得了一些成功,但它们有时仍然会在开始另一个声音之前错过最后一点声音。我的应用程序按顺序播放短音。 杰瑞

最佳答案

虽然这是一个老问题,但我想我会在这里发布一些东西,因为我无法在网上找到解决这个问题的方法,但确实提出了一些解决方案......

我在我的应用程序启动时获取每个声音的持续时间(使用 MediaPlayer),并将 R.id.sound_name 值和持续时间存储在一起。然后我可以使用 SoundPool 播放声音。

获取时长的代码:

private long getSoundDuration(int rawId){
  MediaPlayer player = MediaPlayer.create(context, rawId);
  int duration = player.getDuration();
  return duration;
}

在我的声音课上,我像往常一样播放声音,然后在这段时间内 sleep 。非常简单的东西。

看起来效果不错。为我提供了 SoundPool 的低延迟优势,以及链接事物的能力。

有几点需要注意:

  • 不要每次都获取持续时间,因为创建 MediaPlayer 会产生开销。
  • 持续时间取自文件元数据——ogg 对我来说非常有用,但我不能保证其他任何东西。

关于Android 音池计时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3663794/

相关文章:

android - Watchdog !@Sync error 表示什么?

android - 片刻后按钮声音停止

android - Android混合原始声音。源是Java数组,不是文件或资源

android - 如何在 Linux 中被动监控是否正在建立新的 TCP 连接?

android - TextView 的椭圆大小不适用于 maxLines = 1

android - 当用户单击通知消息时,我想在主屏幕上打开一个弹出窗口

android - 隐藏库源代码

android - 为节奏制作音池

android - 使用 SoundPool 播放多个声音时如何消除噼啪声

android - 在继续应用程序之前等待 SoundPool 加载