Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MP3时长Java_Java_Mp3 - Fatal编程技术网

MP3时长Java

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

为了得到一组MP3的准确时间,花了很长时间。我有以下使用生成的属性

现在我正在阅读的文件的持续时间是iTunes报告的47:35,Mac Preview报告的是48:50

当我使用库获得Java中的持续时间时,我得到26:46:

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);
            }