LINUX.ORG.RU

flac декодер для common-lisp

 ,


0

3

Размещал на lisper.ru в новости (там народ тоже пиарился), но там как-то вяло. Запилил тут just for fun основу для flac-декодера

https://github.com/shamazmazum/cl-flac

Пишу нечто подобное впервые. Вышло не шибко быстро, в ~5 раз тормознее декодера на C (для sbcl последнего, машина amd athlon x2 64 6600). Документации нет, но написал пример использования: конвертер в wav. Использовать так:

(asdf:load-system :cl-flac-examples)
(flac-examples:flac2wav «name.flac» «name.wav»)

Перекодирует файлы с 8 и 16 bps, fixed block size. У кого есть возможность запустить, прошу отписаться по тому, как работает. Ну и советы дать.



Последнее исправление: CYB3R (всего исправлений: 1)

Советы точно не дам, потому что для этого надо разбираться в коде и время для этого выделить. Однако должен заметить, что работает: flac, который я ему подсунул, преобразовал в wav. А с каким «декодером на Си» сравнивалась скорость преобразования?

Zubok ★★★★★
()
Ответ на: комментарий от Zorn

Хорошо сжимаемого Брайана Ино (186 метров flac -> 471 wav) расжимает за 32.3 секунды, flac -d - за 6.7

Just drop CLOS!

anonymous
()
Ответ на: комментарий от Zorn

Ну, да. Для flac vs cl-flac оценка «где-то в 6 раз» примерно выдерживается у меня. Я Kraftwerk поразжимал.

Zubok ★★★★★
()
Ответ на: комментарий от anonymous

Хм, да в какой-то pdf'ке по sbcl написано, что slot-value в лучшем случае в 1.6 тормознее, чем «open-coded structure slot accessor».

Можно убрать CLOS пока там, где он не нужон, а потом посмотрим

Zorn
() автор топика

Где-то в пять-шесть раз медленней flac, да. Ради эксперимента пустил на Clozure — раз в 14 медленней сишного flac.

Artificial_Thought ★★★★
()
Ответ на: комментарий от Zorn

Надо еще глянуть, нельзя ли сделать какие-нибудь алгоритмические оптимизации. Ты сам писал реализацию по спецификации или поглядывал на чужую реализацию на Си?

Zubok ★★★★★
()
Ответ на: комментарий от Zubok

Профайлил с помощью sb-sprof. Там основная нагрузка на read-bit/bits, то есть на низкоуровневый ридер. У меня сначала вообще жуть самопальная была, потом взял trivial-bit-streams Love5an'а, а потом переписал аналогичную себе (так как его библиотека была перегружена как-то). В итоге стало куда быстрее. Сначала вообще примерно в 20 раз медленнее была.

Zorn
() автор топика
Ответ на: комментарий от Zubok

Подглядывал, но одним глазком)

Zorn
() автор топика
Ответ на: комментарий от Zorn

Профайлил с помощью sb-sprof. Там основная нагрузка на read-bit/bits, то есть на низкоуровневый ридер.

Это работа с файлами? Может, вот тут собака порылась?

Zubok ★★★★★
()
Ответ на: комментарий от Zubok

Ага, правда я не знаю, как лучше сделать. Ещё сегодня lpc decoder развернул как в исходниках flac. Стало чуть быстрее, процентов на 5-10.

Zorn
() автор топика
Ответ на: комментарий от Zorn

Попробуй, что ли, посмотреть исходники read-sequence - нет ли там чего-нибудь лишнего (если дело в нём, хотя из твоих сообщений это неясно).

den73 ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.