Считать размер ID3v2 тегов из mp3 файла (Java, побитовые операции)

187
03 декабря 2021, 14:30

Как можно считать размер тегов из ID3v2 заголовка с помощью Java?

Вкратце: Размер хранится в 4 байтах[6,7,8,9 байты от начала]. Из 8 бит используется 7, первый бит всегда 0. Пример из статьи на хабре
Убираем пустые байты, затем убираем нули из 3го байта и первый ноль из последнего остаётся [][][111][1110110]. Теперь объединяем получившееся и получаем искомое число. Только, как это сделать в коде?

Может кому пригодится:
Ссылка на статью на хабре: Внутри MP3. А как оно всё устроено?
Ссылка на описание структуры ID3: Структура ID3 с офф сайта

Answer 1

В общем как то так получилось. Не уверен на счёт маски... Надеюсь на комментарий более разбирающегося в вопросе.

/** 
         * Считывает значение int из 4 байт, отбрасывая 0 бит из каждого байта 
         * @param fourByte 4 байта числа 
         * @return Число 
         */ 
        private int bytesToSynchsafeInt(byte[] fourByte){ 
            return (((fourByte[0] & 0xff) << 21) | (((fourByte[1] & 0xff) << 14) | 
                    (((fourByte[2] & 0xff) <<  7) | ((fourByte[3] & 0xff))))); 
        }

P.S.
Кстати, к размеру ещё надо добавить 10 байт заголовка

READ ALSO
Как инициализировать размер массива с использованием конструктора?

Как инициализировать размер массива с использованием конструктора?

Я хочу при вызове конструктора задать размер массива, находящегося в теле классаДля этого я пытаюсь использовать указатель p, который бы забирал...

170
Не получается обернуть HANDLE в std::unique_ptr

Не получается обернуть HANDLE в std::unique_ptr

Появилось желание обернуть в RAII классы ряд объектов из WinAPI (хендлы, сертификаты и тд

98
Qt. Частичная перерисовка области

Qt. Частичная перерисовка области

У меня будет простое банковское приложениеИ я решил сделать такой интерфейс:

75
Получение доступа к объекту в приватном поле дружественного класса

Получение доступа к объекту в приватном поле дружественного класса

Есть класс, назовём его FirstclassВ нём, в приватном поле определён структурный тип следующего вида:

213