Я использую SoundPool для воспроизведения аудиоклипов в моем приложении. Все хорошо, но мне нужно знать, когда закончится воспроизведение клипа.
В данный момент я отслеживаю его в своем приложении, получая продолжительность каждого клипа, используя экземпляр MediaPlayer . Это работает нормально, но выглядит расточительным, чтобы загрузить каждый файл дважды, просто чтобы получить длительность. Я мог приблизительно рассчитать длительность, зная длину файла (доступно из AssetFileDescriptor ), но мне все равно нужно было знать частоту дискретизации и количество каналов.
Я вижу два возможных решения этой проблемы:
- Выяснение, когда закончится воспроизведение клипа (кажется невозможным с SoundClip).
- Наличие класса, который может загрузить только заголовок аудиофайла и дать мне частоту дискретизации / количество каналов (и, в идеале, счетчик выборок, чтобы получить точную длительность).
Есть предложения?
Спасибо,
Max
Код, который я использую в данный момент (работает нормально, но довольно тяжел для этой цели):
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();
// ...
}
Кстати, этот вопрос уже был задан , но не получил ответов.