задержка медиаплеера андроида

Я делаю игру для Android, которая должна воспроизводить небольшой звуковой сигнал всякий раз, когда пользователь касается определенного объекта.

Для этого у меня есть этот простой код для создания медиаплеера. beep — это небольшой .ogg файл длиной ~1,5 секунды.

MediaPlayer mp = MediaPlayer.create(getContext(), R.raw.beep);
mp.setVolume(0.5f, 0.5f);

и использовать его так

mp.start();

У меня проблема в том, что моя игра использует холст Android, а поток, который рисует на холсте, также вызывает mp.start(). Я обнаружил, что воспроизведение звука занимает довольно много времени, и оно сильно различается по времени. Иногда 1 мс, иногда 15 мс. Кажется, это приводит к тому, что моя игра немного отстает, так как холст Android в любом случае довольно медленный.

Я просмотрел журналы, и у меня нет сборки мусора, вызывающей задержку. Мне интересно, может ли кто-нибудь дать мне совет, чтобы уменьшить эту задержку

РЕДАКТИРОВАТЬ. Я только что обнаружил, что MediaPlayer предназначен для более длинных звуковых файлов, а SoundPool лучше для более коротких аудиофайлов. Однако я загружаю файл в mediaPlayer только один раз, поэтому я не вижу, как это должно иметь какое-либо значение. хотя буду тестить


person Henry Walters    schedule 21.02.2012    source источник


Ответы (1)


Извините за мой английский

Используйте SoundPool вместо MediaPlayer, потому что MediaPlayer необходимо освобождать память после каждого вызова или вызывать метод mp.release() после каждого вызова player

руководство по SoundPool здесь

person budgie    schedule 21.02.2012