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

前端 未结 3 1492
星月不相逢
星月不相逢 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: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;
    
    }
    

提交回复
热议问题