我正在为Android制作一款游戏,需要在用户触摸特定对象时播放短促的蜂鸣声。
为此,我有一个简单的代码来创建媒体播放器。beep是一个约1.5秒长的小.ogg文件。
我遇到的问题是我的游戏使用了Android画布(canvas),并且绘制到画布的线程也调用了
为此,我有一个简单的代码来创建媒体播放器。beep是一个约1.5秒长的小.ogg文件。
MediaPlayer mp = MediaPlayer.create(getContext(), R.raw.beep);
mp.setVolume(0.5f, 0.5f);
并像这样使用它
mp.start();
我遇到的问题是我的游戏使用了Android画布(canvas),并且绘制到画布的线程也调用了
mp.start()
。我发现播放声音需要相当长的时间,而且所需时间也不稳定,有时为1毫秒,有时为15毫秒。这似乎导致我的游戏有点卡顿,因为Android画布本来就比较慢。
我查看了日志,没有发现垃圾回收引起的延迟。我想知道是否有人可以给我一些建议来减少这种延迟。
编辑 - 我刚刚发现MediaPlayer
适用于较长的声音文件,而SoundPool
适用于较短的音频文件。然而,我只在mediaPlayer
中加载文件一次,所以我不知道它应该有什么区别。不过我会测试一下。