0

我想用 mp3spi 获得以下 mp3file 的持续时间:

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");

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

我怎样才能得到持续时间?

4

2 回答 2

1

问题是,它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;

完毕!

于 2015-05-19T15:10:22.530 回答
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?

于 2013-06-17T08:46:15.143 回答