MP3时长Java
为了得到一组MP3的准确时间,花了很长时间。我有以下使用生成的属性 现在我正在阅读的文件的持续时间是iTunes报告的47:35,Mac Preview报告的是48:50 当我使用库获得Java中的持续时间时,我得到26:46:MP3时长Java,java,mp3,Java,Mp3,为了得到一组MP3的准确时间,花了很长时间。我有以下使用生成的属性 现在我正在阅读的文件的持续时间是iTunes报告的47:35,Mac Preview报告的是48:50 当我使用库获得Java中的持续时间时,我得到26:46: AudioFileFormat fileFormat = AudioSystem.getAudioFileFormat(f); Map<?, ?> properties = ((TAudioFileFormat) fileFormat
AudioFileFormat fileFormat = AudioSystem.getAudioFileFormat(f);
Map<?, ?> properties = ((TAudioFileFormat) fileFormat).properties();
String key = "duration";
long duration = ((Long) properties.get("duration")) / 1000;
{
String frameBased = String.format("Duration Tag: %d hours, %d min, %d sec",
TimeUnit.MILLISECONDS.toHours(duration),
TimeUnit.MILLISECONDS.toMinutes(duration),
TimeUnit.MILLISECONDS.toSeconds(duration) - TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(duration))
);
System.out.println(frameBased);
}
AudioFileFormat fileFormat=AudioSystem.getAudioFileFormat(f);
映射属性=((TAudioFileFormat)fileFormat).properties();
String key=“持续时间”;
long duration=((long)properties.get(“duration”)/1000;
{
String framebase=String.format(“持续时间标记:%d小时,%d分钟,%d秒”,
时间单位。毫秒。至小时(持续时间),
时间单位。毫秒。至分钟(持续时间),
TimeUnit.millizes.toSeconds(持续时间)-TimeUnit.MINUTES.toSeconds(TimeUnit.millizes.toMinutes(持续时间))
);
System.out.println(基于框架);
}
我运气不太好,所以我想知道我是在做傻事,还是可以用MP3标签中的信息来计算我的实际长度?鉴于iTunes的报告是正确的,我想我应该能够
鉴于iTunes的报告是正确的,我想我应该能够
确定磁道长度的一种故障安全方法是将其转换为标准的音频输入流
,然后测量AIS
或者,根据@Kilian Foth的评论:
不幸的是,这也是唯一的故障安全方法
不幸的是,这也是唯一的防故障方法。我认为你必须逐帧扫描MP3文件以确定其真实长度。
AudioFileFormat fileFormat = AudioSystem.getAudioFileFormat(f);
Map<?, ?> properties = ((TAudioFileFormat) fileFormat).properties();
String key = "duration";
long duration = ((Long) properties.get("duration")) / 1000;
{
String frameBased = String.format("Duration Tag: %d hours, %d min, %d sec",
TimeUnit.MILLISECONDS.toHours(duration),
TimeUnit.MILLISECONDS.toMinutes(duration),
TimeUnit.MILLISECONDS.toSeconds(duration) - TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(duration))
);
System.out.println(frameBased);
}