读取音频文件的信息

项目里需要读取音频的播放时间,找了一个下午发现这个:

jaudiotagger(http://www.jthink.net/jaudiotagger/)

它是一个音频标签JAVA库,目前支持 Mp3, Mp4 (Mp4 audio, M4a and M4p audio) Ogg Vorbis, Flac and Wma, 但是对Wav 和 Real 的支持有限。

读取m4a格式的播放时间

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
/**
 * 获取m4a格式文件的播放时间
 * @param filePath
 * @return
 */
public static int getMp4AudioLength (String filePath){
  File file = new File(filePath);
  Mp4FileReader reader = new Mp4FileReader();
  int length = -1;
    AudioFile f;
  try {
      f = reader.read(file);
      AudioHeader head = f.getAudioHeader();
      length = head.getTrackLength();
  } catch (CannotReadException e) {
      log.error(e.getMessage(), e);
  } catch (IOException e) {
      log.error(e.getMessage(), e);
  } catch (TagException e) {
      log.error(e.getMessage(), e);
  } catch (ReadOnlyFileException e) {
      log.error(e.getMessage(), e);
  } catch (InvalidAudioFrameException e) {
      log.error(e.getMessage(), e);
  }
  return length;
}

读取mp3格式的播放时间

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
/**
 * 获取mp3格式文件的播放时间
 * @param filePath
 * @return
 */
public static int getMp3AudioLength (String filePath){
  File file = new File(filePath);
  int length = -1;
  try {
      MP3File f = (MP3File)AudioFileIO.read(file);
      MP3AudioHeader audioHeader = f.getMP3AudioHeader();
      length = audioHeader.getTrackLength();
  } catch (CannotReadException e) {
      log.error(e.getMessage(), e);
  } catch (IOException e) {
      log.error(e.getMessage(), e);
  } catch (TagException e) {
      log.error(e.getMessage(), e);
  } catch (ReadOnlyFileException e) {
      log.error(e.getMessage(), e);
  } catch (InvalidAudioFrameException e) {
      log.error(e.getMessage(), e);
  }
  return length;
}