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

最近的一个项目需要按照时间播放mp3文件,例如,播放10分钟的不同音乐。

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

方案一:Java的方式

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

 1         try {
 2             
 3             MP3File file = new MP3File("E:\\music\\光辉岁月.mp3");            
 4             MP3AudioHeader audioHeader = (MP3AudioHeader)file.getAudioHeader();
 5             
 6             String strLen = audioHeader.getTrackLengthAsString();
 7             System.out.println(strLen);
 8             
 9             int intLen = audioHeader.getTrackLength();
10             System.out.println(intLen);
11             
12         } catch (IOException e) {
13             e.printStackTrace();
14         } catch (TagException e) {
15             e.printStackTrace();
16         } catch (ReadOnlyFileException e) {
17             e.printStackTrace();
18         } catch (InvalidAudioFrameException e) {
19             e.printStackTrace();
20         } catch (CannotReadException e) {
21             e.printStackTrace();
22         }

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

1 04:01
2 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左右,用哪一种,见仁见智了。

 
 
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值