What is the best way to get an audio file duration in Android?

前端 未结 3 1489
星月不相逢
星月不相逢 2020-12-16 00:37

I\'m using a SoundPool to play audio clips in my app. All is fine but I need to know when the clip playback has finished.

At the moment I track it in my app by obta

相关标签:
3条回答
  • 2020-12-16 01:15

    Try FFmpegMediaMetadataRetriever:

    String[] fileNames = ...
    FFmpegMediaMetadataRetriever mmr = new FFmpegMediaMetadataRetriever();
    
    for (String fileName : fileNames) {
        AssetFileDescriptor d = context.getAssets().openFd(fileName);
        mmr.setDataSource(d.getFileDescriptor(), d.getStartOffset(), d.getLength());
        String duration = mmr.extractMetadata(FFmpegMediaMetadataRetriever.METADATA_KEY_DURATION);
    }
    
    mmr.release();
    
    0 讨论(0)
  • 2020-12-16 01:24

    Did you try this:

    String mediaPath = Uri.parse("android.resource://<your-package-name>/raw/filename").getPath();
    MediaMetadataRetriever mmr = new MediaMetadataRetriever();
    mmr.setDataSource(mediaPath);
    String duration = mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DURATION);
    mmr.release();
    

    But i am not exactly sure that this is lighter than exisiting code.

    0 讨论(0)
  • 2020-12-16 01:27

    this is work for me to get assets audio file duration in total seconds=====>

    MediaMetadataRetriever mmr = new MediaMetadataRetriever();
    AssetFileDescriptor d = context.getAssets().openFd(fileName);
    mmr.setDataSource(d.getFileDescriptor(), d.getStartOffset(), d.getLength());
    String duration = 
    mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DURATION);
    mmr.release();
    

    Updated

    method to get assets audio file duration in seconds

      public String gettotaltimeassets() {
    
       MediaMetadataRetriever mmr = new MediaMetadataRetriever();
        AssetFileDescriptor d = null;
        try {
            d = getApplicationContext().getAssets().openFd("ASSETS FILE NAME");
        } catch (IOException e) {
            e.printStackTrace();
        }
        mmr.setDataSource(d.getFileDescriptor(), d.getStartOffset(), d.getLength());
        String duration = mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DURATION);
        long dur = Long.parseLong(duration);
        String seconds = String.valueOf((dur % 60000) / 1000);
        Log.d("seconds===========>", seconds);
        mmr.release();
        return  seconds;
    }
    

    method to get internal storage audio file duration in seconds

    public String gettotaltimestorage(String filePath) {
        // load data file
        Log.d("time=================>","time=================>");
        MediaMetadataRetriever metaRetriever = new MediaMetadataRetriever();
        metaRetriever.setDataSource(YourACTIVITY.this, Uri.parse(filePath));
        Log.d("time=================>","time=================>");
        String out = "";
        // get mp3 info
    
        // convert duration to minute:seconds
        String duration =
                metaRetriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DURATION);
        Log.d("time=================>", duration);
        long dur = Long.parseLong(duration);
        String seconds = String.valueOf((dur % 60000) / 1000);
        Log.d("seconds===========>", seconds);
        // close object
        metaRetriever.release();
        return  seconds;
    
    }
    
    0 讨论(0)
提交回复
热议问题