android – 如何在游戏中正确使用SoundPool?

我在使用SoundPool时遇到了性能问题.每次播放声音时,帧速率都会下降.我添加了一些日志,我可以在logcat上看到“播放”功能有时需要8ms.

我正在使用* .ogg文件,SoundPool初始化在应用启动时完成:

mAudioManager = (AudioManager) context.getSystemService(Context.AUdio_SERVICE);
mSoundPool = new SoundPool(size, AudioManager.STREAM_MUSIC, 0);
mSoundPoolMap = new HashMap<Integer, Integer>();
mSoundPoolMap.put(index, mSoundPool.load(context, R.raw.shot, 1));

要播放声音,我使用以下代码(在游戏循环内):

mSoundPool.play(id, streamVolume, streamVolume, 1, loop, 1f);

我的问题是:

>我应该在游戏循环之外的另一个线程上调用“play”吗?
>我应该通过服务叫“玩”吗?
>我做错了什么?

谢谢!

更新:

我刚测试在另一个线程上播放声音并通过服务播放声音,但滞后仍然存在.

然后我做了以下测试:
*以1000毫秒的间隔播放声音 – >滞后总是发生
*以200ms的间隔播放声音 – >从来没有发生过

怎么可能?!?!?
在这些测试之后,似乎当没有任何东西在播放时,SoundPool正在重置,当它再次播放时,初始化需要更长时间……非常奇怪!

解决方法:

我通过循环播放静音来解决问题:

mSoundPool.play(id, 0, 0, 1, -1, 1f);

滞后完全消失了!

这似乎不是正确的事情,所以如果有人知道如何解释这一点,请告诉我们!

更多信息:
http://www.thiagorosa.com.br/en/how-to/improve-soundpool-performance

相关文章

Android性能优化——之控件的优化 前面讲了图像的优化,接下...
前言 上一篇已经讲了如何实现textView中粗字体效果,里面主要...
最近项目重构,涉及到了数据库和文件下载,发现GreenDao这个...
WebView加载页面的两种方式 一、加载网络页面 加载网络页面,...
给APP全局设置字体主要分为两个方面来介绍 一、给原生界面设...
前言 最近UI大牛出了一版新的效果图,按照IOS的效果做的,页...