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 应该这样做,但它不起作用,所以我不得不自己做。
我试图获取 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 应该这样做,但它不起作用,所以我不得不自己做。