Каков наилучший способ чтобы узнать продолжительность аудиофайла в Android?

Я использую SoundPool для воспроизведения аудиоклипов в моем приложении. Все в порядке, но мне нужно знать, когда воспроизведение клипа закончилось.

На данный момент я отслеживаю его в своем приложении, получая продолжительность каждого клипа с помощью экземпляра MediaPlayer . Это нормально работает, но загружать каждый файл дважды, просто чтобы узнать продолжительность, выглядит расточительным. Я мог бы приблизительно рассчитать продолжительность сам, зная длину файла (доступный в AssetFileDescriptor ), но мне все равно нужно было бы знать частоту дискретизации и количество каналов.

Я вижу два возможных решения к этой проблеме:

  1. Выявление, когда клип закончил воспроизведение (похоже, это невозможно с 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();
        // ...
    }
    

    Кстати, этот вопрос уже был задан , но не получил ответа.

11
задан Community 23 May 2017 в 12:07
поделиться