您的位置:首页 > 编程语言 > Java开发

Java获取音频文件(MP3)的播放时长

2016-06-24 16:19 726 查看
最近的一个项目需要按照时间播放mp3文件,例如,播放10分钟的不同音乐。

这就意味着我得事先知道mp3文件的播放时长,以决定播放几遍这个文件。

方案一:Java的方式

找第三方的库,真的感谢这些提供jar包的高手,找到一个项目:jaudiotagger。

try {

MP3File file = new MP3File("E:\\music\\光辉岁月.mp3");
MP3AudioHeader audioHeader = (MP3AudioHeader)file.getAudioHeader();

String strLen = audioHeader.getTrackLengthAsString();
System.out.println(strLen);

int intLen = audioHeader.getTrackLength();
System.out.println(intLen);

} catch (IOException e) {
e.printStackTrace();
} catch (TagException e) {
e.printStackTrace();
} catch (ReadOnlyFileException e) {
e.printStackTrace();
} catch (InvalidAudioFrameException e) {
e.printStackTrace();
} catch (CannotReadException e) {
e.printStackTrace();
}


上面的示例代码输出的结果如下:

04:01
241


很强大,上面显示04分钟,01秒。即下面的4*60+1=241秒。

这种方案简单测试了一下时间,每次计算需要120ms左右,略长。

方案二:自己动手计算。

1 步骤一 计算文件长度
2 File file = new File("/home/monitor/broadsound/as.mp3");
3          long length = file.length();
4 步骤二 查询文件的播放速度(Linux下)
5 String rate = "";
6          try {
7                 String[] command = { "/bin/sh", "-c", "file /home/monitor/broadsound/as.mp3" };
8                 Process process = Runtime.getRuntime().exec(command);
9                 BufferedReader br = new BufferedReader(new InputStreamReader(process.getInputStream()));
10                 StringBuffer buff = new StringBuffer();
11                 String line;
12                 if ((line = br.readLine()) != null) {
13                     System.out.println(line);
14                     buff.append(line).append("\n");
15                     String tt  = line.split(",")[4];
16                     rate = tt.split(" ")[1].trim();
17                     System.out.println(rate);
18                 }
19             } catch (Exception e) {
20                 e.printStackTrace();
21             }
22 步骤三 除法运算
23 wantedTime = length / 1000 * 8 / Integer.parseInt(rate)


这个数据算出来不是特别准确,但是花费时间20ms左右,用哪一种,见仁见智了。


                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: