LINUX.ORG.RU

Меня доконала эта помойка (*.mp3)

 , ,


1

3

Для всех:

Если ты не работал руками (апи либ не в счет) с *.mp3 форматом — проходи мимо. Однако, если будет нормальная мысль - я весь внимание.

Для тех кто «в теме»:

Всякие ID3, LYRICS, AiD и прочую шелуху я скипнул.

И вот, парсю mp3-фреймы. Если ориентироваться на позиции sync-word-ов (ессно проверяю и все остальные данные в этих 4-х чарах) найденных в файле, то, можно вычислить размер каждого фрейма. Ага, я то вычисляю, но, эти размеры, а равно и их позиции, а равно и общее кол-во фреймов, не совпадает с тем кол-вом фреймов найденных libmp3lime (mad я пока не пробовал, надо будет поковырять).

Есь такая формула:

if (!header->layer) {
    header->frame_size = (size_t) (((12000 * header->bitrate / header->samplerate) + header->padding_bit) * 4);
} else {
    header->frame_size = (size_t) ((144000 * header->bitrate / header->samplerate) + header->padding_bit);
}

Но она выдает размеры (300-8000 байт) не равные ни тому что я напарсил по синк-вордам, ни тому что напарсил libmp3lime.

А вот еще интересно, libmp3lime имеет в своем апи ф-цию «hip_decode1()» она, как написано, должна принимать на вход ОДИН мп3-фрейм, но, эксперименты дали понять, что ей вообще похер, что ты туда пихаешь, лишь бы не менее ~1200 байт, т.е. читай из файла и все.

Но мне то надо обрыскать весь файл и узнать точное число RAW-PCM фреймов закодированных в мп3.

Недавно видел тут в новостях про какой-то плеер чот тип того: «более-точное определение длительности мп3-трека», я смотрю, не один я с этой херней совладать не могу )))

UPD: А, да, кратко по проблеме. Кто подскажет где скопипастить:

1) правильную формулу вычисления длины мп3-фрейма. 2) правильный алгоритм выпарса и валидации этих самых фреймов.

Либы? Либы я копаю, и даже несколько великов нашел на гитхабе. Но там либо помойка, костыли и говнокод, либо поддержка одного лайера.

★★★★★

Последнее исправление: deep-purple (всего исправлений: 1)
Ответ на: комментарий от deep-purple

Обращайся. Особенно когда с flac начнёшь. Я по нему дипломированный специалист

lisper-pipisper
()
Ответ на: комментарий от waker

Это потому, что у меня один знакомый в мессенджере - Lime, я из-за него теперь всегда путаю ))

deep-purple ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.