如何在不创建MediaPlayer实例的情况下获取mp3曲目持续时间?我只需要在mp3文件列表中显示mp3歌曲长度,所以我认为我不应该为列表中的每个曲目创建MediaPlayer对象
另一个:
有时MediaPlayer会返回错误的歌曲持续时间(我认为这是因为这些文件的比特率是dinamic)。我怎样才能获得合适的歌曲持续时间?
答案 0 :(得分:29)
// 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();
答案 1 :(得分:8)
您可以使用MediaMetadataRetriever来获取歌曲的持续时间。将METADATA_KEY_DURATION与extractMetadata()功能结合使用。
答案 2 :(得分:1)
如果您想支持较旧的Android版本,可以使用第三方库。例如,http://www.jthink.net/jaudiotagger/工作正常,但Android应用程序相对空间消耗(略小于1 MB)。
真正的程序员当然会从二进制文件解析持续时间而不使用任何库;)我没有足够的技能。
答案 3 :(得分:0)
我发现这更准确getLength with FFmpeg
int soundLength = (int) new SoxController(context, new File(""), shell).getLength(soundPath);
答案 4 :(得分:0)
这是Kotlin版本:
Query firebaseSearchQuery = mDatabaseReference
.child("mov")
.child("bolly")
.orderByChild("name_mov")
.equalTo(s);
答案 5 :(得分:0)
假设mp3文件放在原始文件夹中,然后
MediaPlayer m = MediaPlayer.create(MyActivity.this, R.raw.my_mp3_file);
int durationInMilliSeconds = m.getDuration();
m.release();
m = null;