确定音频文件的时长和格式

13

给定一个音频文件的路径(在SD卡上),如何最好地确定音频长度(以毫秒为单位)和文件格式(或互联网媒体类型)?

(对于音频持续时间,可以使用 MediaPlayer getDuration 方法,但这似乎太慢/笨重。)


2
这个问题也在以下网址进行了讨论:
  • https://dev59.com/_W445IYBdhLWcg3wws0u
  • http://stackoverflow.com/questions/3357484/
- Kaarel
3个回答

12

对于音频文件的长度:

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://dev59.com/iGoy5IYBdhLWcg3wZdCr#8591230


谢谢,我知道这个解决方案。我想知道是否还有其他方法。 - Kaarel
如果你可以不调用prepare,那么它不应该太低效。 - John K
2
getDuration() 可以在 {Prepared, Started, Paused, Stopped, PlaybackCompleted} 之一的状态中调用,因此 prepare() 是必需的。 - Kaarel

5
我认为最简单的方法是:
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))
        );

1

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


谢谢,MediaFile并不是SDK的一部分,请参见http://stackoverflow.com/questions/2726280/。 - Kaarel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接