我是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音乐收藏(1,000多个带有CBR和VBR的歌曲),并对每个文件进行Java迭代,所有这些都说持续时间是未知的。我还尝试了来自多个不同来源的wav文件(只是为了确保它不是mp3格式),以查看该文件是否已更改并且没有任何变化。没有什么,但持续时间未知。我还检查以确保标签在适当的位置,每个其他程序都说这些文件的文件属性中的长度或持续时间很好。
奇怪的是,当我将Media对象传递给MediaPlayer时,该文件可以完美播放。尽管我可以使用外部库来获取长度,但是由于整个程序都使用java和javafx库,所以这样做会更容易且更简化。
如果您阅读Media
类的Javadoc ,它说您应该等待媒体播放器准备就绪:
媒体信息是异步获取的,因此不一定在类实例化后立即可用。但是,如果实例已与MediaPlayer关联并且该播放器已转换为Status.READY状态,则所有信息都应该可用。
因此,您只需要创建一个实例MediaPlayer
并侦听Status.READY
:
File filestring = new File("my/file/dir/file.mp3");
Media file = new Media(filestring.toURI().toString());
MediaPlayer mediaPlayer = new MediaPlayer(file);
mediaPlayer.setOnReady(new Runnable() {
@Override
public void run() {
System.out.println("Duration: "+file.getDuration().toSeconds());
// display media's metadata
for (Map.Entry<String, Object> entry : file.getMetadata().entrySet()){
System.out.println(entry.getKey() + ": " + entry.getValue());
}
// play if you want
mediaPlayer.play();
}
});
我是Java和JavaFX的新手,过去几年我一直在用QT开发Python,现在我正在用Java和JavaFX开发。 我正在开发一个程序,为用户播放音乐文件设定时间,然后停止。因此,我需要从媒体对象获取持续时间,以便告诉音频何时停止(基于用户的时间输入),但是,媒体对象上的getDuration()方法总是返回UNKNOWN。 我在Windows 8.1和openSuSE 13.2上使用JDK8u2
在PowerShell中,有没有办法将ISO 8601指定的持续时间转换成DateTime对象?例如,PT30M是30分钟前,因此如果现在的时间是< code>2019-07-31 17:00:00,我希望时间戳为< code>2019-07-31 16:30:00。 我尝试过显而易见的 - 但这(毫不奇怪地失败了) Get Date:输入对象不能绑定到命令的任何参数,因为命令不接受管道输入,或者
问题内容: 我需要一个Python / C / C ++ / Java实现,可以 暂停散列进步 和 商店 ,在这样一个文件进度的进展是 可恢复 从该文件在稍后阶段。 无论上面列出的是哪种语言编写的,它都应该可以在Python中正常工作。建议您提供它以便与“ hashlib”一起良好地工作,但这不是必需的。同样,如果已经存在这样的事物,那么到此的链接就足够了。 对于一个想法 ,您的实现应该实现什么。
> 自动对象t何时会被销毁? 它会被编译器安全地销毁吗? 为什么是未定义的行为?
问题内容: 如何获取格式为2个字符串的持续时间? 我正在尝试使用Calendar类并检查。我与此有关的问题是它不一致。知道我在做什么错吗?每次我运行该程序时,如果没有,输出40-70行到控制台。 问题答案: 那是一个已记录的错误。 尝试在设置日历之前清除日历:
许多记者将显示测试持续时间,以及标记缓慢的测试,如“spec”记者所示: 要调整被认为“慢”的东西,您可以使用以下slow()方法: describe('something slow', function() { this.slow(10000); it('should take long enough for me to go make a sandwich', function() { /