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

时间:2022-11-10 21:09:34

最近的一个项目需要按照时间播放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秒。即下面的4*60+1=241秒。

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

方案二:自己动手计算。

  步骤一 计算文件长度
File file = new File("/home/monitor/broadsound/as.mp3");
long length = file.length();
步骤二 查询文件的播放速度(Linux下)
String rate = "";
try {
String[] command = { "/bin/sh", "-c", "file /home/monitor/broadsound/as.mp3" };
Process process = Runtime.getRuntime().exec(command);
BufferedReader br = new BufferedReader(new InputStreamReader(process.getInputStream()));
StringBuffer buff = new StringBuffer();
String line;
if ((line = br.readLine()) != null) {
System.out.println(line);
buff.append(line).append("\n");
String tt = line.split(",")[];
rate = tt.split(" ")[].trim();
System.out.println(rate);
}
} catch (Exception e) {
e.printStackTrace();
}
步骤三 除法运算
wantedTime = length / * / Integer.parseInt(rate)

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