MP3持续时间Java

时间:2011-07-21 12:31:12

标签: java mp3

有一段时间试图获得一组MP3的准确时间。我使用MP3SPI 1.9.5 library生成以下属性。

//      mp3.crc=true
//      mp3.copyright=true
//      mp3.padding=false
//      mp3.channels=1
//      mp3.version.mpeg=2.5
//      mp3.length.bytes=6425480
//      mp3.framerate.fps=27.777779
//      mp3.framesize.bytes=140
//      duration=1606356000
//      mp3.version.layer=3
//      mp3.length.frames=44621
//      mp3.frequency.hz=8000
//      mp3.header.pos=0
//      mp3.bitrate.nominal.bps=16000
//      mp3.vbr.scale=0
//      mp3.version.encoding=MPEG2DOT5L3
//      mp3.mode=3
//      mp3.vbr=false
//      mp3.original=false

现在我正在阅读的文件的持续时间为iTunes报告的47:35,使用Mac预览的时间为48:50。

当我使用库获得Java的持续时间时,我得到26:46:

AudioFileFormat fileFormat = AudioSystem.getAudioFileFormat(f);
            Map<?, ?> properties = ((TAudioFileFormat) fileFormat).properties();
            String key = "duration";
            long duration = ((Long) properties.get("duration")) / 1000;
            {
                String frameBased = String.format("Duration Tag: %d hours, %d min, %d sec",
                        TimeUnit.MILLISECONDS.toHours(duration),
                        TimeUnit.MILLISECONDS.toMinutes(duration),
                        TimeUnit.MILLISECONDS.toSeconds(duration) - TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(duration))
                    );
                    System.out.println(frameBased);
            }

我没有太多运气,所以我想知道我是不是在做一些愚蠢的事情,或者我是否可以使用MP3标签中的信息来计算我的实际长度?鉴于iTunes正确报告,我认为我应该能够。

1 个答案:

答案 0 :(得分:2)

  

鉴于iTunes正确报告,我认为我应该能够。

确定轨道长度的一种自动防故障方法是将其转换为标准AudioInputStream,然后测量AIS。

或者,根据@Kilian Foth的评论:

  

不幸的是,这也是唯一的故障安全方式。