SoundPoolの使用中にパフォーマンスの問題が発生します。サウンドを再生するたびに、フレームレートが低下します。いくつかのログを追加しましたが、logcatで「再生」機能に8ミリ秒かかることがあります。
* .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);
私の質問は次のとおりです。
- ゲームループの外で、別のスレッドで「プレイ」と呼ぶ必要がありますか?
- サービスを通じて「プレイ」と呼ぶべきですか?
- 私は何か間違ったことをしていますか?
ありがとう!
アップデート:
別のスレッドでサウンドを再生し、サービスを介してサウンドを再生することをテストしましたが、ラグはまだ存在しています。
次に、次のテストを行いました。*1000ms間隔でサウンドを再生->ラグは常に発生します*200ms間隔でサウンドを再生->ラグは発生しません
そんなことがあるものか?!?!?これらのテストの後、何も再生されていないときはSoundPoolがリセットされ、再び再生されるときは初期化に時間がかかるようです...非常に奇妙です!