Я делаю игру для 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
только один раз, поэтому я не вижу, как это должно иметь какое-либо значение. хотя буду тестить