android - 获取音频文件的持续时间

标签 android audio audio-recording duration

我制作了一个录音机应用程序,我想在 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/

相关文章:

java - android studio 中不显示字符串

php - Android 和 JavaScript : How to know in javascript that an application is installed in the Android device or not?

c++ - 输出到声卡的 C++ 音频波形合成器。我从哪开始呢?

java - 将音频记录保存到文件对象

android - Volley 的 DiskBasedCache 的性能问题

java - 如何让ImageView在屏幕上随机移动而不脱离屏幕?

android - 调用 AudioRecord.start() 时出现 IllegalStateException

android - 音频服务无法停止android

windows - 学习音频操作

java - 如何在 ROOTED 设备上录制 VOIP 电话?