【发布时间】:2013-11-02 15:15:32
【问题描述】:
我正在使用 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";
}
}
【问题讨论】: