我制作了一个录音机应用程序,我想在 ListView 中显示录音的持续时间。我这样保存录音:
MediaRecorder recorder = new MediaRecorder();
recorder.setOutputFormat(MediaRecorder.OutputFormat.DEFAULT);
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT);
folder = new File(Environment.getExternalStorageDirectory()
+ File.separator + "Audio recordings");
String[] files = folder.list();
int number = files.length + 1;
String filename = "AudioSample" + number + ".mp3";
File output = new File(Environment.getExternalStorageDirectory()
+ File.separator + "Audio recordings" + File.separator
+ filename);
FileOutputStream writer = new FileOutputStream(output);
FileDescriptor fd = writer.getFD();
recorder.setOutputFile(fd);
try {
recorder.prepare();
recorder.start();
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
Log.e(LOG_TAG, "prepare() failed");
e.printStackTrace();
}
如何获取此文件的持续时间(以秒为单位)?
提前致谢
---编辑 我搞定了,我在 MediaPlayer.setOnPreparedListener() 方法中调用了 MediaPlayer.getduration(),所以它返回了 0。
最佳答案
MediaMetadataRetriever
是一种轻量级且高效的方法。 MediaPlayer
太重,在滚动、分页、列表等高性能环境中可能会出现性能问题。
此外,Error (100,0)
可能发生在 MediaPlayer
上,因为它很重,有时需要一次又一次地重新启动。
Uri uri = Uri.parse(pathStr);
MediaMetadataRetriever mmr = new MediaMetadataRetriever();
mmr.setDataSource(AppContext.getAppContext(),uri);
String durationStr = mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DURATION);
int millSecond = Integer.parseInt(durationStr);
关于android - 获取音频文件的持续时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15394640/