【问题标题】:Android soundpool timingAndroid 音池计时
【发布时间】:2010-09-08 00:41:28
【问题描述】:

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

【问题讨论】:

    标签: android soundpool


    【解决方案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 个左右就足够了……但你可能需要更多,这取决于你的声音。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多