2011-07-21 75 views
1

嘗試爲一組MP3獲得準確時間花了很長時間。我有以下這些使用MP3SPI 1.9.5 library生成的屬性。MP3持續時間Java

//  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 

現在我正在閱讀的文件的持續時間爲47:35,如iTunes報告,48:50使用Mac Preview。

當我使用的庫得到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

不幸的是,這也是* only * fail-safe的方式。 –

+1

我認爲你必須逐幀掃描MP3文件來確定它的真實長度。 – Nayuki

回答

2

鑑於iTunes正確報告,我認爲我應該可以。

確定軌道長度的一種故障安全方式是將其轉換爲標準AudioInputStream,然後測量AIS。

或者,按@Kilian Foth的評論:

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