【问题标题】:Determining the duration and format of an audio file确定音频文件的持续时间和格式
【发布时间】:2011-06-15 16:50:38
【问题描述】:

给定音频文件的路径(在 SD 卡上),确定音频长度(以毫秒为单位)和文件格式(或 Internet 媒体类型)的最佳方法是什么?

(在此期间可以使用MediaPlayergetDuration-方法,但这似乎太慢/太笨拙了。)

【问题讨论】:

标签: android audio


【解决方案1】:

对于音频文件的长度:

File yourFile;
MediaPlayer mp = new MediaPlayer();
FileInputStream fs;
FileDescriptor fd;
fs = new FileInputStream(yourFile);
fd = fs.getFD();
mp.setDataSource(fd);
mp.prepare(); 
int length = mp.getDuration();
mp.release();

检查 MimeType: https://stackoverflow.com/a/8591230/3937699

【讨论】:

  • 谢谢,我知道这个解决方案。我想知道是否还有其他方法。
  • 如果你不调用prepare就可以侥幸,那应该不会太低效。
  • getDuration() 可以在 {Prepared, Started, Paused, Stopped, PlaybackCompleted} 之一的状态下调用,因此 prepare() 是强制性的。
【解决方案2】:

我认为最简单的方法是:

MediaPlayer mp = MediaPlayer.create(this, Uri.parse(uriOfFile);
int duration = mp.getDuration();
mp.release();
/*convert millis to appropriate time*/
return String.format("%d min, %d sec", 
            TimeUnit.MILLISECONDS.toMinutes(duration),
            TimeUnit.MILLISECONDS.toSeconds(duration) - 
            TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(duration))
        );

【讨论】:

    【解决方案3】:

    只是为您提供一个答案,但您可能可以通过文件扩展名确定媒体类型 - 我认为 MediaFile 可能能够帮助您。至于持续时间,我相信 getDuration() 方法实际上是一个原生调用,所以我不知道你是否能够更快地完成它。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-03-22
    • 2015-07-25
    • 1970-01-01
    • 2011-03-30
    • 2013-03-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多