2017-08-11 187 views
1

我试图获得持续时间音频在Java中的文件。AudioInputStream.getFrameLength返回不正确的长度

我写了这个代码(与计算器的一些帮助):

public static Duration getDuration(File file) { 
    AudioInputStream audioInputStream = 
    AudioSystem.getAudioInputStream(file); 
    AudioFormat format = audioInputStream.getFormat(); 
    long frames = audioInputStream.getFrameLength(); 
    double durationInSeconds = (frames)/format.getFrameRate(); 
    return Duration.ofSeconds(Math.round(durationInSeconds)); 
} 

我加入POM文件中的一些音频库才能够得到正确的AudioInputStream(com.googlecode.soundlibs.basicplayer )。

但是,audioInputStream.getFrameLength总是返回-1值,当我尝试从我的类路径加载一些mp3。

有人有同样的问题吗?

感谢

回答

1

最后,它曾与下面的代码

public static Duration getDuration(File file) { 
    val audioInputStream = AudioSystem.getAudioInputStream(file); 
    val fileFormat = AudioSystem.getAudioFileFormat(file); 
    long frames = fileFormat.getFrameLength(); // I get the frame length from file format, not InputStream 
    val format = audioInputStream.getFormat(); 
    double durationInSeconds = (frames)/format.getFrameRate(); 
    return Duration.ofSeconds(Math.round(durationInSeconds)); 
} 

内部getAudioInputStream应该这样做,但它没有工作,所以我不得不这样做我自己。