У меня есть класс Sound.java, который состоит из 3 функций (initSound, addSound и playSound).
public static void initSound(Context con) {
mContext = con;
soundPool = new SoundPool(4, AudioManager.STREAM_MUSIC, 0);
soundPoolMap = new HashMap<Integer, Integer>();
audioManager = (AudioManager)mContext.getSystemService(Context.AUDIO_SERVICE);
streamVolume = audioManager.getStreamVolume(AudioManager.STREAM_MUSIC);
streamVolume = streamVolume / audioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
}
public static void addSound(int index, int SoundID) {
soundPoolMap.put(index, soundPool.load(mContext, SoundID, 1));
}
public static void playSound(int index) {
soundPool.play(soundPoolMap.get(index), streamVolume, streamVolume, 1, 0, 1f);
}
Я вызвал initSound и addSound в конструкторе MainGame.java.
Sound.initSound(getContext());
Sound.addSound(1, R.raw.machine_gun);
и вызывается playSound внутри потока (зацикливание) в MainGame.java.PlaySound вызывается каждую секунду, когда происходит событие (например, когда враг находится в поле зрения, войска (более одного) будут стрелять (воспроизводить звук) непрерывно, пока враг не погиб).
Sound.playSound(1);
Проблема в том, что при воспроизведении звука приложение замедляется.Я использую Soundpool, потому что, насколько я знаю, для звуковых эффектов Soundpool лучше, чем медиаплеер.(Я пробовал медиаплеер, и задержка еще больше.)
Используемый мной звуковой файл .wav (8-разрядный PCM без знака, 1 канал, 8000 Гц) с размером 5,44 КБ.
Есть ли лучший способ воспроизвести эффектные звуки, не снижая при этом производительность игры, или моя ошибка?Я действительно ценю любые идеи и ответы.