Войти
ПрограммированиеФорумЗвук

Opus mini decoder

#0
22:18, 14 фев. 2018

Есть тут те, кто занимался написанием декодера (ну или энкодера) для lossy-форматов типа Opus, OGG/Vorbis, AAC, MP3?
Интересует вопрос: насколько сложно написание декодера с нуля (больше всего интересует Opus, меньше всего – MP3)?
Реально ли уместить его, скажем, в несколько килобайт (скажем, 4) чистого скомпилированного кода (без чтения/записи файлов, вывода на аудиоустройство)? Хотя бы с обрезанными некоторыми функциями (например, использовать только MDCT-кодирование, без LP; или только декодирование моно-сигнала)? Или меньше нескольких десятков килобайт лучше не мечтать?
И вообще, в чём самая сложная часть?


#1
22:39, 14 фев. 2018

Вот простая однофайловая библиотека для декодирования OGG/Vorbis  - https://github.com/nothings/stb/blob/master/stb_vorbis.c

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

#2
22:44, 14 фев. 2018

В 4 не знаю,... в 8кб точно должно влезть, на нормальном процессорном CISC ядре.  А вот всякие RISC извращения с обрезанным набором инструкций могут и не вместиться. Сам декодер не очень сложный (если не все режимы поддерживать) https://tools.ietf.org/html/rfc6716#section-4

#3
0:23, 15 фев. 2018

ataradov, глянул мельком, там какая-то "инверсная" таблица на 1 Кб + процедуры кодирования (imdct_stepX_XXX_loop, inverse_mdct), напоминающее алгоритм MD5 (не по сути, а чисто визуально) :)
В целом, конечно, разобраться можно, но матчасть (спецификацию) нужно знать по-любому.

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

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

#4
0:45, 15 фев. 2018

Я понятия не имею как OGG/Vorbis работает, но эта библиотека гарантирована работает с обычными OGG файлами. Есть-ли там что-то лишнее я тоже не знаю.

DCT - это discrete cosine transform.

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

Тема в архиве.