Речь, конечно же, не о том чуде, что на картинке, а о декодировании MPEG 1 Layer II музыки. Формат устаревший, но кому-то очень нужный.
Собственно статьи-то особо никакой нету (уж простите, писать не о чем), просто хотел бы поделится со всеми, кто неравнодушен.
Собственно, проблема очевидна. Нечем нам, любителям ОС на assembler, играть музыку. Точнее играть ее есть на чем. но… это всё форки mpglib, причем портированные, к примеру, на KolibriOS именно на языке C. К слову, очень нехорогая тенденция с Колибри в последнее время — засилие си-шного кода. KolibriOS превращается из assembler-os просто в mini-os. Ну да ладно, это мое мнение просто.
Так вот, перерыл весь интернет, насобирал кучи исходников и… пустота. Начал сам писать декодер mp3 из дизассемблированных листингов, прогресс есть, только вот времени нету. И тут наткнулся на очень давний сорец декодера mp2 — единственный минус — уж очень он был не приспособлен в flat assembler. Да и с портируемостью беда.
Пришлось взять его за основу, вынести ос-функции в отдельные файлы (собственно «оболочка» и функции) и ядро (уже подлатанное) — в отдельный.
В итоге вышло чудо — 17-и килобайтовая программа отлично декодирует mp2 в wav (т.е. можно и в pcm, но так удобнее слушать)! (если быть честным, то прибавьте еще килобайт 10 неинициализированных данных, хотя в своей ОС можно и выделять динамически буфер под них)
Сорцы + исходники + примеры mp2 музыки по ссылке
Но вот только теперь незадача: найти mp2-музыку в интернете не легко. Приходится перекодировать, если кому пригодится — единственное адекватное решение — twolame. MP2Enc, к слову, некорректно кодирует.
Поделиться с друзьями