我在根据字节解析 mp3 文件中的数据时遇到问题。
第一部分输出是正确的,我有一个 254 秒长的 mp3 文件,我从 Github 的 mp3 解析库 mp3agic 获取它的信息。
但是,关于帧长度和持续时间的信息的第二部分是不正确的。
Length of this mp3 is: 254 seconds
Bitrate: 320 kbps (CBR)
Sample rate: 44100 Hz
Has ID3v1 tag?: NO
Has ID3v2 tag?: YES
Has custom tag?: NO
framelength -1
framerate 38.28125
duration -271265.06
我用来获取帧长度、帧速率和持续时间的代码是:
File file = musicFile.getFileValue();
this.audioStream.startMusicStream(file);
try {
AudioInputStream audioInputStream = AudioSystem.getAudioInputStream(file);
AudioFormat format = audioInputStream.getFormat();
long audioFileLength = file.length();
int frameSize = format.getFrameSize();
float frameRate = format.getFrameRate();
float durationInSeconds = (audioFileLength / (frameSize * frameRate));
System.out.println("framelength "+frameSize);
System.out.println("framerate "+frameRate);
System.out.println("duration "+durationInSeconds);
this.setDurationLabel(durationInSeconds);
} catch (Exception e) {
e.printStackTrace();
}
首先,为什么帧长度和其他测量结果甚至是负数?那有什么意思?以及如何使用来自音频输入流和音频格式的信息准确计算 mp3 文件的持续时间?