用mp3spi热得到mp3文件的持续时间?

时间:2013-06-17 08:39:28

标签: java audio mp3

我想用mp3spi获取以下mp3文件的持续时间:

http://www.thapps.net/recordings/troporocks.mp3

我只有以下属性

mp3.crc=false
mp3.copyright=false
mp3.padding=false
mp3.channels=2
mp3.version.mpeg=1
mp3.framerate.fps=38.28125
mp3.framesize.bytes=413
mp3.version.layer=3
mp3.frequency.hz=44100
mp3.header.pos=0
mp3.bitrate.nominal.bps=128000
mp3.vbr.scale=0
mp3.version.encoding=MPEG1L3
mp3.mode=0
mp3.vbr=false
mp3.original=true

使用此代码时:

ByteArrayInputStream bais = new ByteArrayInputStream(audioFile.file); 

AudioFileFormat baseFileFormat = new MpegAudioFileReader().getAudioFileFormat(bais);

Map<String, Object> properties = baseFileFormat.properties();
Integer duration = (Integer) properties.get("duration");

但是持续时间在属性地图中不可用。

我如何获得持续时间?

2 个答案:

答案 0 :(得分:0)

我尝试使用File而不是ByteArrayInputStream,它可以工作。

考虑改变你的代码:

File file = new File("filename.mp3");
AudioFileFormat baseFileFormat = new MpegAudioFileReader().getAudioFileFormat(file);
Map properties = baseFileFormat.properties();
Long duration = (Long) properties.get("duration");

您使用的是哪个版本的mp3Spi?

答案 1 :(得分:0)

问题是,new MpegAudioFileReader().getAudioFileFormat(bais)指向TAudioFileReader

的继承方法

这是我扩展MpegAudioFileReader以使其工作的方式:

在第300行附近添加了此方法

public AudioFileFormat getAudioFileFormat(InputStream inputStream) throws UnsupportedAudioFileException, IOException {
    return getAudioFileFormat(inputStream, inputStream.available());
}

评论此行(约400)

//FileInputStream fis = (FileInputStream) inputStream;

完成!