我正在为 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()
关于安卓媒体播放器延迟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9373801/