我正在使用 Java 开发一个音频项目,该项目要求我根据其数据(而不是文件扩展名)确定音频文件类型,并且我已经用 MP3 碰壁了。据我了解,MP3 文件被分成帧,其中每个帧都有一个 4 字节的标头,其中包含 11 个用于帧同步和其他数据的分类。现在我的代码可以准确地识别 WAVE 文件,但是当我开始读取测试 MP3 文件的字节时,我在任何地方都找不到 11111111 字节(11 个帧同步位中的前 8 个)。
try {
FileInputStream fis = new FileInputStream(f);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
byte[] buff = new byte[11];
byte[] byteData;
int bytes = 0;
while ((bytes = fis.read(buff)) != -1) {
baos.write(buff, 0, buff.length);
}
byteData = baos.toByteArray();
fis.close();
baos.close();
if ((int)byteData[0] == 255) {
type = "MP3";
} else if (("" + (char)byteData[8] + (char)byteData[9] +
(char)byteData[10] + (char)byteData[11]) == "WAVE") {
type = "WAVE";
}
}