2011-07-21 8 views
1

MP3セットの正確な時間を得ようと苦労しています。私はMP3SPI 1.9.5 libraryを使って生成された以下のプロパティを持っています。MP3 Duration 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 

私が読んでいるファイルの再生時間はiTunesで47:35、Macプレビューで48:50です。

私は、ライブラリを使用してJavaで時間を得るとき、私は26:46取得:私は多くの幸運を持っていないよ、私はダム何かをやっている場合、私は思っていた、またはI場合

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

残念なことに、これも*唯一のフェールセーフな方法です。 –

+1

私はあなたがその真の長さを決定するためにフレームごとにMP3ファイルをスキャンしなければならないと思います。 – Nayuki

答えて

2

iTunesが正しく報告していると私はできるはずです。

トラックの長さを決定するフェールセーフの方法は、標準AudioInputStreamに変換し、AISを測定することです。

あるいは、@Kilian Fothのコメントどおり:

残念ながら、それはまたのみフェイルセーフな方法です。