我在使用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));
Run Code Online (Sandbox Code Playgroud)
要播放声音,我使用以下代码(在游戏循环内):
mSoundPool.play(id, streamVolume, streamVolume, 1, loop, 1f);
Run Code Online (Sandbox Code Playgroud)
我的问题是:
谢谢!
更新:
我刚测试在另一个线程上播放声音并通过服务播放声音,但滞后仍然存在.
然后我做了以下测试:*以1000毫秒的间隔播放声音 - >总是发生滞后*以200毫秒的间隔播放声音 - >延迟从不发生
怎么可能?!?!?经过这些测试后,似乎没有播放时,SoundPool正在重置,当它再次播放时,初始化需要更长时间......非常奇怪!
我通过循环播放静音来解决问题:
mSoundPool.play(id, 0, 0, 1, -1, 1f);
Run Code Online (Sandbox Code Playgroud)
滞后完全消失了!
这似乎不是正确的事情,所以如果有人知道如何解释这一点,请告诉我们!
更多信息:http: //www.thiagorosa.com.br/en/how-to/improve-soundpool-performance
| 归档时间: |
|
| 查看次数: |
6859 次 |
| 最近记录: |