audio - 是否可以在下载整个文件之前知道 MP3 的持续时间?

标签 audio mp3 duration file-format jlayer

这是一个关于 MP3 文件格式的问题。

我一直在寻找获得 MP3 持续时间的方法。由于我使用 JLayer SPI 来解码 MP3,我发现这在音频源是文件的情况下是可能的。

AudioFileFormat fileFormat = AudioSystem.getAudioFileFormat(source);
Long microseconds = (Long) fileFormat.properties().get("duration");
System.out.println(microseconds);

但是,当我使用类似的代码和完全相同的 MP3 并将源更改为 URL 时,JLayer 不提供持续时间:
AudioFileFormat fileFormat = AudioSystem.getAudioFileFormat(source.toURI().toURL());
Long microseconds = (Long) fileFormat.properties().get("duration");
System.out.println(microseconds);

这是一个重要的区别,因为我想播放的一些音乐将来自 URL 而不是本地文件。

我怀疑这是由于文件格式的限制。

这让我想到一个非常简单的问题。是否可以在下载整个文件之前知道 MP3 的持续时间?

最佳答案

答案是不。 mp3 文件格式没有关于文件持续时间的任何信息。要计算持续时间,您需要将文件长度除以比特率。这也可以解释您的图书馆的行为。作为一种解决方法,如果您可以控制服务器上的文件,您应该能够将持续时间嵌入 id3 标记中。

关于audio - 是否可以在下载整个文件之前知道 MP3 的持续时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28706093/

相关文章:

java - 如何将声音(WAV)写入文件

c++ - 位排序/字节顺序 flac 解码

c++ - 当我使用整数编码读取 mp3 时,libmpg123 强制浮点输出

python - 用于生成音频文件的好 python 库?

java - java.time.Duration 如何计算 toDays()?

java - 如何使按钮播放声音?

ios - ios播放系统声音

node.js - 仅从 nodejs 窗口流式传输 mp3 文件时的 Chrome "stalling"

sql - 是否首选在SQL事件中使用结束时间或持续时间?

language-agnostic - 哪些图书馆可以正确计算秒数以及哪些日期?