我试图用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 值。
有人有同样的问题吗?
由于
答案 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应该这样做,但它没有工作,所以我必须自己做。