Я пишу программу, которая может определять любые данные о файле mp3.Основываясь на информации на этой веб-странице (http://www.multiweb.cz/twoinches/mp3inside.htm), моя программа считывает весь mp3-файл в байтовый массив, затем проверяет наличие тега v2 в начале и тега v1 в конце файла.
Моя проблемас данными, которые вы можете получить из заголовков. Насколько я понимаю, мне нужно искать байты, которые 1111_1111 и следующий 111x_xxxx. Есть довольно много совпадений по этому критерию, которые не являются заголовками, просто случайнымсовпадение, поэтому я создал класс MP3Header, который имеет все поля, упомянутые на приведенной выше веб-странице (ID, слой, битрейт и т. д.), и переопределил метод equals, чтобы вернуть true, если ID, слой и частота соответствуют (я используюпервый заголовок, который я нахожу в качестве основы и сравниваю каждый следующий после него с этим).
Этот метод, кажется, отлично работает для mp3-файлов CBR, однако некоторые VBR доставляют мне трудные времена.Первый заголовок, который я нахожу, неверен, и с этого момента все сравнение искажается (я не проверяю битрейт на равенство, поэтому не могуон причина).Единственное правильное объяснение, которое я могу придумать, заключается в том, что тег в начале может содержать символы из расширенной таблицы ASCII, и, поскольку Java не имеет unsigned int, байт 1111_1111 (255) может быть интерпретирован как -1 при преобразованиик инт.Мой вопрос: как я могу убедиться, что байты, которые я нахожу, действительно являются правильным заголовком?Или я должен хранить все, что соответствует критериям, и проверять, какой из них является наиболее частым, и идти с этим?
Спасибо, Иштван
PS: Я знаю, что это, вероятно, можно решить только с помощьюнесколько строк кода, если я использую JMF, однако мне очень нравится писать его так: