SoundPool замедляет приложение - PullRequest
0 голосов
/ 18 июня 2011

У меня есть класс 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 КБ.

Есть ли лучший способ воспроизвести эффектные звуки, не снижая при этом производительность игры, или моя ошибка?Я действительно ценю любые идеи и ответы.

Ответы [ 2 ]

0 голосов
/ 21 января 2013

У меня была такая же проблема. Затем я создал новый поток для Soundpool и добавил 20 мс сна в цикл while. Проблема исчезла.

0 голосов
/ 18 июня 2011

Согласно документам SoundPool , он декодируется в 16-битный PCM, так что вы можете перейти к нему и посмотреть, сможете ли вы получить какую-то производительность от этого.Кроме того, ваш код кажется довольно похожим (по крайней мере, насколько я помню) с вещами, которые я делал раньше, и я не видел каких-либо существенных проблем с производительностью (я думаю, что я даже не использовал WAV, я был простоиспользуя OGG, но я точно не помню).Вы пытаетесь сделать это на реальном устройстве или только на эмуляторе?

...