Хотя это старый вопрос, я думал, что выложу что-нибудь здесь, так как не мог найти решение этой проблемы в Интернете, но нашел какое-то решение ...
Я получаю продолжительность каждого звука (используя MediaPlayer) при запуске моего приложения и сохраняю значение R.id.sound_name и продолжительность вместе. Затем я могу воспроизводить звуки с помощью SoundPool.
Код для получения продолжительности:
private long getSoundDuration(int rawId){
MediaPlayer player = MediaPlayer.create(context, rawId);
int duration = player.getDuration();
return duration;
}
В моем классе звука я затем играю звук как обычно, затем сплю в течение продолжительного времени. Довольно простые вещи.
Кажется, работает хорошо. Дает мне преимущества малой задержки от SoundPool, а также возможность связывать вещи.
Пара вещей на заметку:
- Не получайте длительность каждый раз, так как создание MediaPlayer связано с накладными расходами.
- Длительности взяты из метаданных файла - работа ogg отлично подходит для меня, но я не могу поручиться за что-либо еще.