Получить MP3 продолжительность в android

Как получить длительность MP3-трека без создания экземпляра MediaPlayer? Мне просто нужно показать длину песни mp3 в списке файлов mp3, поэтому я думаю, что я не должен создавать объект MediaPlayer для каждого из треков в списке

и еще:

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

4 ответов


можно использовать MediaMetadataRetriever чтобы получить продолжительность песни. Используйте METADATA_KEY_DURATION в сочетании с extractMetadata() функции.


       // load data file
       MediaMetadataRetriever metaRetriever = new MediaMetadataRetriever();
       metaRetriever.setDataSource(filePath);

String out = "";
       // get mp3 info

      // convert duration to minute:seconds
String duration =  
     metaRetriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DURATION);
    Log.v("time", duration);
    long dur = Long.parseLong(duration);
    String seconds = String.valueOf((dur % 60000) / 1000);

    Log.v("seconds", seconds);
    String minutes = String.valueOf(dur / 60000);
    out = minutes + ":" + seconds;
    if (seconds.length() == 1) {
        txtTime.setText("0" + minutes + ":0" + seconds);
    }else {
        txtTime.setText("0" + minutes + ":" + seconds);
    }
    Log.v("minutes", minutes);
      // close object
       metaRetriever.release();

Если вы хотите поддерживать более старые версии Android, вы можете использовать стороннюю библиотеку. Например http://www.jthink.net/jaudiotagger/ отлично работает, хотя это относительно много места для приложения Android (немного меньше 1 МБ).

настоящие программисты, конечно, разобрать время из двоичного файла без использования каких-либо библиотек ;) у меня не было достаточно навыков для этого.


Я нашел это более точным getLength с FFmpeg

int soundLength = (int) new SoxController(context, new File(""), shell).getLength(soundPath);