Android 声音池时序

发布于 2024-09-17 18:38:51 字数 101 浏览 8 评论 0原文

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

Is there a reliable way to prevent truncating of sounds in soundpool? I have had some success with the sleep() function between sounds, but they still sometimes miss the last bit of sound before starting another sound. My app plays short sounds in sequence.
Jerry

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

仅此而已 2024-09-24 18:38:51

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

我得到每个声音的持续时间(使用 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 的工作对我来说非常有用,但我不能保证其他任何事情。

Although this is an old question, I thought I would post something here since I couldn't find a solution to this problem online but did come up with something of a solution...

I get the duration of each sound (using MediaPlayer) when my app starts up, and store the R.id.sound_name value and the duration together. I can then play the sounds using the SoundPool.

Code to get duration:

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

In my sound class, I then play the sound as usual then sleep for the duration. Pretty simple stuff.

Seems to work well. Gives me the advantages of low-latency from SoundPool, plus ability to chain things.

A couple things to note:

  • Don't get the duration each time, as creating a MediaPlayer has overhead.
  • Durations are taken from file metadata -- ogg's work great for me, but I can't vouch for anything else.
梦里兽 2024-09-24 18:38:51

确保您有足够的流。
在 SoundPool 构造函数中,第一个参数是 MaxStreams。
将其设置为您认为合适的任何值。我想 8 左右应该足够了...但你可能需要更多,具体取决于你的声音。

Make sure you have enough Streams.
in the SoundPool constructor, the first argument is MaxStreams.
Set that to whatever you seem fit. 8 or so should be enough i guess... but you might need more, depending on your sounds.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文