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