安卓媒体播放器延迟

标签 android android-mediaplayer

我正在为 android 制作一个游戏,每当用户触摸某个对象时,它需要发出一声小哔声。

为此,我使用了这个简单的代码来创建媒体播放器。 beep 是一个小的 .ogg 文件,长度约为 1.5 秒。

MediaPlayer mp = MediaPlayer.create(getContext(), R.raw.beep);
mp.setVolume(0.5f, 0.5f);

然后像这样使用它

mp.start();

我遇到的问题是我的游戏使用 android Canvas ,绘制到 Canvas 的线程也调用 mp.start()。我发现播放声音会花费很多时间,而且花费的时间长短不一。有时 1ms,有时 15ms。这似乎导致我的游戏明显滞后了一点,因为 android Canvas 无论如何都非常慢。

我查看了日志,似乎没有垃圾收集导致延迟。我想知道是否有人可以给我一些建议以减少这种延迟

编辑 - 我刚刚发现 MediaPlayer 专为较长的声音文件而设计,而 SoundPool 更适合较短的音频文件。但是,我只将文件加载到 mediaPlayer 一次,所以我看不出它应该有什么不同。不过我会测试一下

最佳答案

抱歉我的英语不好

使用 SoundPool 而不是 MediaPlayer,因为 MediaPlayer 需要在每次调用后释放内存或在每次调用播放器后调用方法 mp.release()

SoundPool tutorial here

关于安卓媒体播放器延迟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9373801/

相关文章:

android - 如何在 MediaPlayer 应用程序中限制/去抖搜索栏搜索事件

安卓。报警管理器。重复警报不触发,一段时间后,一次触发所有警报

android - 如何在 android 中为媒体播放器开发自定义均衡器?

android - 单击外部时如何隐藏布局?

java - 在新的Android studio中运行时出错

android - 如何在 Android 中自动播放/停止默认声音?

android - ExoPlayer如何控制当前两个音频文件的播放

Android 媒体播放器异常在 10 秒后超时

android - 在 Bundle 中传递对象 - ClassNotFoundException

android - 如何使用Gradle使HoloEverywhere与新的Android项目一起使用?