【发布时间】:2010-09-08 00:41:28
【问题描述】:
是否有可靠的方法来防止声音池中的声音被截断?我在声音之间的 sleep() 函数上取得了一些成功,但它们有时仍然会在开始另一个声音之前错过最后一点声音。我的应用按顺序播放短声音。 杰瑞
【问题讨论】:
是否有可靠的方法来防止声音池中的声音被截断?我在声音之间的 sleep() 函数上取得了一些成功,但它们有时仍然会在开始另一个声音之前错过最后一点声音。我的应用按顺序播放短声音。 杰瑞
【问题讨论】:
虽然这是一个老问题,但我想我会在这里发布一些东西,因为我在网上找不到解决这个问题的方法,但确实想出了一些解决方案......
当我的应用程序启动时,我获取每个声音的持续时间(使用 MediaPlayer),并将 R.id.sound_name 值和持续时间存储在一起。然后我可以使用 SoundPool 播放声音。
获取持续时间的代码:
private long getSoundDuration(int rawId){
MediaPlayer player = MediaPlayer.create(context, rawId);
int duration = player.getDuration();
return duration;
}
在我的声音课上,我像往常一样播放声音,然后在这段时间内睡觉。很简单的东西。
似乎运作良好。为我提供了 SoundPool 的低延迟优势,以及链接事物的能力。
需要注意的几点:
【讨论】:
确保您有足够的 Streams。 在 SoundPool 构造函数中,第一个参数是 MaxStreams。 将其设置为您认为合适的任何内容。我猜 8 个左右就足够了……但你可能需要更多,这取决于你的声音。
【讨论】: