Как вы все знаете, старый декодер на долгое время поселился в ксаше, в качестве mp3 проигрывателя, но к сожалению обладал рядом существенных недостатков. Одним из главных недостатков было наличие отсутствия встроенного хэндлера файловой системы, из-за чего плеер принимал на вход исключительно куски буффера, которые пользователь должен был скармливать ему на своё усмотрение. Проблема заключалась в том, что mp3 это не wav и данные в нём не являются непрерывным потоком, где можно встать в любую точку файла и получить валидный выход. Там информация разбита на блоки-кадры, но это тоже полбеды. Беда в том, что соседние кадры могут отличаться, внезапно заканчиваться, быть испорченными и еще куча других потенциальных проблем, решить которые можно только непосредственным чтением этих кадров. В конечном итоге это приводило к переодическому бульканию звука при загрузке сейва, а в совсем тяжелых случаях - к вылету всего движка. Сперва я себя успокаивал тем, что это Элбер какие-то калечные mp3 сделал для паранои, но когда я поймал аналогичный вылет в римейке кваки, где все mp3 были закодированы мной и провереным энкодером, я понял, что с этим надо что-то делать. Я взял самую свежую версию mpg123 и долго-долго отрезал от нее всё лишнее, пока размер получившейся либы не начал меня устраивать. Еще из побочных приятных эффектов нового декодера - он не булькает на испорченых mp3 файлах, как это делала старая версия и не спотыкается об ID3v2.
Новая версия имеет аналогично старой тестовое приложение, ну и создана окружающая среда для бэкапов, на тот случай, если кто-нибудь захочет над ним поработать в дальнейшем. А в движок, естественно попадёт уже скомпилированная либа.
Добавлено 29-01-2017 в 22:31:
Update: старый плеер при потере синхронизации внутри кадра вообще прекращал декодирование Только сейчас проверил.
Вложение: libmpg.7z (457.7 кб)
Этот файл был скачан 514 раз.