【问题标题】:Hot to get mp3 file duration with mp3spi?使用 mp3spi 获取 mp3 文件持续时间很热?
【发布时间】:2013-06-17 08:39:28
【问题描述】:

我想用 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");

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

如何获得持续时间?

【问题讨论】:

    标签: java audio mp3


    【解决方案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;
    

    【讨论】:

      【解决方案2】:

      我尝试使用 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?

      【讨论】:

      • 使用文件而不是 bais 有效。为什么? mp3spi的版本是1.9.5。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-27
      相关资源
      最近更新 更多