Java获取音频文件(MP3)的播放时长
2016-06-24 16:19
726 查看
最近的一个项目需要按照时间播放mp3文件,例如,播放10分钟的不同音乐。
这就意味着我得事先知道mp3文件的播放时长,以决定播放几遍这个文件。
方案一:Java的方式
找第三方的库,真的感谢这些提供jar包的高手,找到一个项目:jaudiotagger。
上面的示例代码输出的结果如下:
很强大,上面显示04分钟,01秒。即下面的4*60+1=241秒。
这种方案简单测试了一下时间,每次计算需要120ms左右,略长。
方案二:自己动手计算。
这个数据算出来不是特别准确,但是花费时间20ms左右,用哪一种,见仁见智了。
这就意味着我得事先知道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左右,用哪一种,见仁见智了。
相关文章推荐
- java标识符类型的命名规则
- Synchronized(一)------java中Synchronized的用法
- java对象的访问
- java nio 常见的nio类, nio 写文件方法, nio 比io 的优势
- Java正则获取邮箱
- eclipse最有用快捷键整理
- Elasticsearch java API (5)Transport Client
- java编程心得(持续更新)
- java自学之旅(3)测试RandomAccessFile常用方法
- 华为机试---最大间隔
- java.util.concurrent
- Elasticsearch java API (4)部署在JBoss EAP6模块
- SpringMVC+Shiro权限管理
- Java NIO Channel
- Java正则抓取Email
- 玩转Eclipse开发工具(三)
- java创建二维码
- javaWeb程序的web.xml的作用
- eclipse启动出现“An Error has Occurred. See the log file”解决方法
- 【风马一族_Java】如何使用ACSLL表的值,