Я работаю над аудиопроектом в java, который требует, чтобы я определял типы аудиофайлов на основе их данных (в отличие от расширения файла), и я ударил стену с MP3. Насколько я понимаю, файлы MP3 разбиты на кадры, где каждый кадр имеет 4-байтовый заголовок, содержащий 11 для синхронизации кадров и набор других данных. Прямо сейчас мой код может точно идентифицировать файл WAVE, но когда я начинаю читать байты своего тестового файла MP3, я нигде не могу найти 11111111 байт (первые 8 из 11 битов синхронизации кадра).
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";
}
}