【发布时间】:2014-11-29 23:14:51
【问题描述】:
我是 Java 和 JavaFX 的新手,过去几年我一直在使用 QT 在 Python 上进行开发,现在我正在使用 Java 和 JavaFX 进行开发。
我正在开发一个程序,可以在用户设定的时间播放音乐文件,然后停止。因此,我需要从媒体对象获取持续时间,以便告诉音频何时停止(基于用户时间输入),但是,媒体对象上的 getDuration() 方法总是返回 UNKNOWN。
我在 Windows 8.1 和 openSuSE 13.2(都有相同的问题)上使用 JDK8u25(最新的稳定版本):
File filestring = new File("my/file/dir/file.mp3")
Media file = new Media(filestring.toURI().toString());
file.getDuration(); // Returns UNKNOWN on both wav and mp3 files
file.getDuration().toMinutes()) // Also tested with toHours() toSeconds(), toMilli()...
// Above returns NaN because the file's duration is unknown
作为一个测试,我把我的整个 mp3 音乐收藏(1000 多首带有 CBR 和 VBR 的歌曲)并让 java 遍历每个文件,他们都说持续时间是未知的。我还尝试了来自多个不同来源的 wav 文件(只是为了确保它不是 mp3 格式),看看它是否改变了……什么都没有;持续时间只有 UNKNOWN。我还检查了标签是否到位,每个其他程序都表示这些文件的文件属性中的长度或持续时间是好的。
奇怪的是,当我将 Media 对象传递给 MediaPlayer 时,文件可以完美播放。虽然我可以使用外部库来获取长度,但是看到整个程序使用 java 和 javafx 库,这会更容易和更精简。
任何帮助将不胜感激。
【问题讨论】: