我想用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");
但是持续时间在属性地图中不可用。
我如何获得持续时间?
答案 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;
完成!