AudioInputStream.getFrameLength返回不正确的长度

时间:2017-08-11 11:30:14

标签: java audio libraries

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

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

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

有人有同样的问题吗?

由于

1 个答案:

答案 0 :(得分: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应该这样做,但它没有工作,所以我必须自己做。

相关问题