AudioInputStream.getFrameLength returns 长度不正确

AudioInputStream.getFrameLength returns incorrect length

我试图获取 Java 中 音频 文件的持续时间。

我写了这段代码(在 Whosebug 的帮助下):

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)。

但是,当我尝试从我的类路径加载一些 mp3 时,audioInputStream.getFrameLength 总是返回一个 -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 应该这样做,但它不起作用,所以我不得不自己做。