Программирование игр, создание игрового движка, OpenGL, DirectX, физика, форум
GameDev.ru / Программирование / Форум / Opus mini decoder

Opus mini decoder

Jin XНовичокwww14 фев. 201822:18#0
Есть тут те, кто занимался написанием декодера (ну или энкодера) для lossy-форматов типа Opus, OGG/Vorbis, AAC, MP3?
Интересует вопрос: насколько сложно написание декодера с нуля (больше всего интересует Opus, меньше всего – MP3)?
Реально ли уместить его, скажем, в несколько килобайт (скажем, 4) чистого скомпилированного кода (без чтения/записи файлов, вывода на аудиоустройство)? Хотя бы с обрезанными некоторыми функциями (например, использовать только MDCT-кодирование, без LP; или только декодирование моно-сигнала)? Или меньше нескольких десятков килобайт лучше не мечтать?
И вообще, в чём самая сложная часть?
ataradovПостоялецwww14 фев. 201822:39#1
Вот простая однофайловая библиотека для декодирования OGG/Vorbis  - https://github.com/nothings/stb/blob/master/stb_vorbis.c

Во сколько оно компилируется - хрен знает.

0iStalkerМодераторwww14 фев. 201822:44#2
В 4 не знаю,... в 8кб точно должно влезть, на нормальном процессорном CISC ядре.  А вот всякие RISC извращения с обрезанным набором инструкций могут и не вместиться. Сам декодер не очень сложный (если не все режимы поддерживать) https://tools.ietf.org/html/rfc6716#section-4
Jin XНовичокwww15 фев. 20180:23#3
ataradov, глянул мельком, там какая-то "инверсная" таблица на 1 Кб + процедуры кодирования (imdct_stepX_XXX_loop, inverse_mdct), напоминающее алгоритм MD5 (не по сути, а чисто визуально) :)
В целом, конечно, разобраться можно, но матчасть (спецификацию) нужно знать по-любому.

0iStalker, а не слишком ли старая спецификация (2012-й год)? Может, какие-то поправки есть с того времени, новые фичи и пр...?
RISC и пр. не интересуют, это всё нужно для Intel (Windows и иже с ним).
Возникла идея сделать Opus-декодер на ассемблере с возможностью отключать разные функции (например, если нужно воспроизводить из ресурсов конкретный файл, то его характеристики заранее известны, следовательно всё "лишнее" можно убрать из кода).

Интересно, а на русском что-нибудь есть? :))

Правка: 15 фев. 2018 0:26

ataradovПостоялецwww15 фев. 20180:45#4
Я понятия не имею как OGG/Vorbis работает, но эта библиотека гарантирована работает с обычными OGG файлами. Есть-ли там что-то лишнее я тоже не знаю.

DCT - это discrete cosine transform.

/ Форум / Программирование игр / Звук

2001—2018 © GameDev.ru — Разработка игр