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
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();
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.
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;
}