Для всех:
Если ты не работал руками (апи либ не в счет) с *.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) правильный алгоритм выпарса и валидации этих самых фреймов.
Либы? Либы я копаю, и даже несколько великов нашел на гитхабе. Но там либо помойка, костыли и говнокод, либо поддержка одного лайера.