Я использую SoundPool для воспроизведения аудиоклипов в моем приложении. Все в порядке, но мне нужно знать, когда воспроизведение клипа закончилось.
На данный момент я отслеживаю его в своем приложении, получая продолжительность каждого клипа с помощью экземпляра MediaPlayer . Это нормально работает, но загружать каждый файл дважды, просто чтобы узнать продолжительность, выглядит расточительным. Я мог бы приблизительно рассчитать продолжительность сам, зная длину файла (доступный в AssetFileDescriptor ), но мне все равно нужно было бы знать частоту дискретизации и количество каналов.
Я вижу два возможных решения к этой проблеме:
Код, который я использую в данный момент (работает нормально, но для этой цели довольно тяжелый):
String[] fileNames = ...
MediaPlayer mp = new MediaPlayer();
for (String fileName : fileNames) {
AssetFileDescriptor d = context.getAssets().openFd(fileName);
mp.reset();
mp.setDataSource(d.getFileDescriptor(), d.getStartOffset(), d.getLength());
mp.prepare();
int duration = mp.getDuration();
// ...
}
Кстати, этот вопрос уже был задан , но не получил ответа.