Как правильно определять начало фрейма в mp3-файле?

Добрый день. Я пытаюсь научиться программированию на C++. Т.к. решать абстрактные задачи без практического применения мне скучно, решил написать условно-полезную программу, которая высчитывает длину mp3 файла.
Руководствовался вот этой статьёй: habrahabr.ru/post/103635
Согласно ей, каждый фрейм имеет вначале 11 синхронизационных бит, которые установлены в единицу. Моя программа ищет в файле значения 0xFFFA и 0xFFFB - именно такие значения может принимать первая половина заголовка фрейма. Однако, некоторые фреймы имеют заголовки 0xFFFA0000. Если этот заголовок расшифровать, то "индекс битрейта" получается равен 0. По всем таблицам этому значению соответствует некий "свободный битрейт", что это значит, и с чем его едят?
Так же мне интересно, может ли данная комбинация (0xFFFA или 0xFFFB) не быть началом нового фрейма, а быть просто куском аудиоданных? Как тогда правильно находить начало фрейма?
  • Вопрос задан
  • 3059 просмотров
Решения вопроса 1
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
"free" means free format. The free bitrate must remain constant, an must be lower than the maximum allowed bitrate. Decoders are not required to support decoding of free bitrate streams.


www.mp3-tech.org/programmer/frame_header.html

Это кастомный формат. То есть то как данные хранятся не регламентируется в спецификации. Вам не обязательно поддерживать обработку таких фреймов.

Основная соль этих фреймов то, как хранятся данные. А хранятся они тупо в стриме, а не пакетами фиксированной длины. Это позволяет задавать более высокий битрейт (до 640 килобит в секунду) и делать какие-то кастомные штуки для своих кодеков.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы