LINUX.ORG.RU

Выпущены аудиоэффекты LSP Plugins 1.1.30

 , , ,


1

1

Выпущена новая версия пакета эффектов LSP Plugins, предназначенных для обработки звука при сведении и мастеринге аудиозаписей.

Наиболее значимые изменения:

  • Реализована новая серия плагинов - Oscilloscope: варианты x1, x2 и x4. Дизайн интерфейса выполнен Bor T.
  • В фреймворк добавлен специальный вид портов для стриминга данных.
  • Добавлена поддержка стробирующих сигналов в графический меш для дополнительных эффектов при рисовании.
  • Реализованы более мягкие функции оверсемплинга для всех поддерживаемых аппаратных архитектур.
  • Незначительные фиксы багов в системных модулях.
  • Исправлена проблема компенсации задержки при автоматизации кнопки байпасса для всех плагинов.
  • Реализован дополнительный ‘Boosting’ режим для компрессоров (однополосного и многополосного).
  • Обновлён перевод на французский (изменения от Olivier Humbert).
  • Обновлён перевод на итальянский от Stefano Tronci.
  • Установка десктопных иконок вынесена в отдельную цель makefile.

Короткая демонстрация разработанного плагина: https://youtu.be/MCIpQebU5o4

Финансовая поддержка проекта:

>>> Подробности

★★

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

Отлично, осциллоскопов не хватало.

James_Holden ★★★★
()

Поздравляю. Мысленно с вами, но заниматься музыкой опять не получается.

Кстати, как там идея с отдельным туллкитом? Переписали уж? Или в процессе? (да, я мог бы сходить и посмотреть, но потрындеть охота)

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

Mode: triggered. Хи-хи. А по делу круто конечно, молодец!

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

Пресеты можно для любого плагина делать, лишь бы DAW позволяла. Но и в конфигурационные файлы можно также при желании сохранить.

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

Пришлось подправить мастер чуть-чуть, Автор UX не захотел светить своего реального имени, надо было на никнейм исправить.

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

Демонстрация того, что мы умеем рисовать не только по X-координате, но и по Y. То есть, эмулируем работу полноценного осциллографа.

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

эмулируем работу полноценного осциллографа

судя по видео (может быть это такая запись с экрана, конечно), фпсу векторскопа есть куда развиваться. а ещё на осцилле можно регулировать время затухания луча (послесвечение). такие картинки будет показывать? только, конечно, раз на ютубе аудио сжимается, то не стоит ожидать 100% совпадения.

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

фпсу векторскопа есть куда развиваться

А надо ли поднимать FPS?

а ещё на осцилле можно регулировать время затухания луча (послесвечение)

Это есть

такие картинки будет показывать?

Если фигуры Лиссажу рисует - то почему не должен?

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

ну не знаю :) надо попробовать, короче. в арче, кстати, пакет обновили 13 часов назад.

anonymous
()

Поздравляю. Нравятся, пользуюсь:)

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

вообще очень даже хорошо, мне понравилось. единственное, что всё же немного отличает плагин от реального осциллоскопа — это то, что в осциллоскопе интенсивность свечения зависит ещё и от скорости движения луча, благодаря чему иногда можно избежать нежелательных линий. несколько картинок для сравнения: https://imgur.com/a/JZ2nclO (скорпион отлично получился; это из-за того, что он нарисован непрерывной линией).

картинки — с исходника (ссылка в описании) из этого видео: https://www.youtube.com/watch?v=tEFzoPMFF0g (только у меня jack настроен в 44.1k, в то время, как исходник в 96k)

фпс норм.

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

Я боюсь, что cairo не потянет просто по производительности. Такие картинки хорошо средствами openGL рисовать. Cairo же уже на 16к линиях тяжко становится.

sadko4u ★★
() автор топика

Второй плагин на скриншотер - это гониометр? Назначение третьего пока не очень понял.

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

это всё один плагин в разных режимах. третий — режим xy, когда один один канал отвечает за x-координату, а второй — за у. в режиме гониометр по оси x откладывается среднее значение двух каналов, а по оси y — половина их разницы. в принципе, почти то же самое, только повёрнуто на 45°, отражено и уменьшено по амплитуде. вот, на картинке один звук одновременно в обоих режимах (смещение настраивал вручную).

гониометром, видимо, можно какие-то углы определять, но вероятно понадобится знание тригонометрии и комплексных чисел :)

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

а у меня вопрос. у вас в наборе есть плагин room builder. скажите мне пожалуйста, там можно эффект пирамиды майя воспроизвести? мне кажется, что надо просто наделать много ступенек и выставить у материала рассеивание побольше. чувак в ролике говорит, что всё дело в той комнате наверху пирамиды, но я думаю, что и без неё эффект будет таким же.

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

Интересный подход, хотя, боюсь, для многих он будет непривычным.

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

Гониометр нужен для понимания и оценки стереокартины (баланса между mid и side). Полезная фича на самом деле.

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

попробовал с пирамидой. взял эту модель в натуральную величину (30 метров высотой, 112700 треугольников), в блендере конвертнул в obj и решил протестировать без отражения звука от земли, то есть на голой модели пирамиды. настроил положение источника и приёмника, импортировал пирамиду и с дефолтными настройками нажал «запуск». хоть тредов и было выбрано 8, но почему-то больше, чем 2 ядра программа не загружала. результата я так и не дождался, не хватило терпения. оно даже с нуля процентов не сдвинулось :(

наверное такая модель слишком сложная для программы.

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

Да, возможно. Полигонов, наверное, многовато было. Чем больше полигонов, тем больше времени уйдёт на расчёт.

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

сделал одну лестницу с полом, 362 треугольника, теперь считает мгновенно, но то ли моя гипотеза не оправдалась, то ли что-то ещё. получается практически просто щелчок с разным тембром. а толщина стен имеет значение? а то у меня просто поверхность, без объёма совсем.

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

То, что получается одиночный клик сейчас, вполне логично, т.к. лучи отразились от поверхности и ушли в бесонечность (нет других препятствий, на которых можно отразиться).

Толщина стен, по идее, не должна большой роли играть. При моделировании отражений мы всё равно полигоны анализируем и их ориентацию относительно падения «звуковых лучей». Мне кажется, надо попробовать полую будку ещё добавить сверху, т.к. весь ухающий ревер, думаю, от неё. Да и то, что лучи назад вернутся, это, возможно, не факт.

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

я предполагал, что звук будет отражаться от каждой ступеньки и возвращаться со всё возрастающей задержкой из-за чего на слух частота хлопка отразившегося от нижних ступеней будет казаться выше частоты хлопка отразившегося от верхних. по анализу времени из ролика вроде бы всё совпадает с размерами и расстояниями: от хлопка до первого отклика — примерно 190 мс, от хлопка конца эхо — примерно 360 мс, что соответствует 32 и 62 метрам расстояния от камеры, поднятой на 1.5 метра над землёй, до начала и конца лестницы. 32 метра от пирамиды до камеры — вполне правдоподобное расстояние, судя по спутниковым снимкам.

мне кажется затуханием и реверберацией эффект плавного изменения частоты не объяснить. но он вполне объясним всё увеличивающимся расстоянием между ступеньками, если брать их проекцию на радиус-вектор от камеры до ступеньки.

если бы будка имела значение, то отражение приходило бы не раньше 360 мс. однако, я попробовал её добавить, но ситуация сильно не поменялась, только стало дольше считаться. а вообще, конечно, здорово послушать даже такое эхо с ревером, будто ты и правда возле какого-то гигантского сооружения. ну почти :)

судя по картинке из мануала, как такового рассеивания не запрограммировано, а есть лишь некая величина, можно сказать, изменяющая лишь направление нормали полигона. позднее я и в коде нашёл формулы, упомянутые в мануале:

kd              = (1.0f + 1.0f / m->diffusion[0]) * distance;
rv.s.x         -= kd * ct->n.dx;
rv.s.y         -= kd * ct->n.dy;
rv.s.z         -= kd * ct->n.dz;

мне кажется, что как раз в этом и есть причина. получается, что у поверхности нельзя настроить шероховатость, отчего почти все «лучи» улетают вникуда.

мой .obj-файл, на случай, если вам вдруг захочется поэкспериментировать со ступеньками :) если нужна пирамида целиком, то скажите, я куда-нибудь выложу.

а ещё хотелось бы у вас спросить, может быть вы знаете какие-то другие свободные программы подобного толка? я знаю только, что есть ещё какой-то плагин к фрикаду для акустического анализа, который через метод конечных элементов считает, но там как-то всё слишком сложно для меня, много непонятного, что я даже компилировать не хочу его. мне бы что-то попроще, навроде вашего плагина, чтобы вставил модель, покрутил пару настроек и сразу же послушал, что получилось.

спасибо, кстати :)

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

а вообще, конечно, здорово послушать даже такое эхо с ревером, будто ты и правда возле какого-то гигантского сооружения. ну почти :)

То есть, всё-таки какой-то эффект получился, хоть и не такой, какой ожидали?

судя по картинке из мануала, как такового рассеивания не запрограммировано, а есть лишь некая величина, можно сказать, изменяющая лишь направление нормали полигона.

Да, реальную диффузию запрограммировать сложно. Хотя, если есть иная модель, как можно сымитировать диффузию, можно впилить.

а ещё хотелось бы у вас спросить, может быть вы знаете какие-то другие свободные программы подобного толка?

Нет, к сожалению не знаю. Для меня самого это был интересный эксперимент. Конечно, физическая модель не идеальная, но позволяет получать интересные результаты.

Возможно, имеет смысл сделать другую модель отражений, но тут опять же надо правильные формулы выбрать.

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

получился эффект, можно сказать, почти однократного отражения с большой задержкой и некоторым ревером. довольно интересный, кстати. очень такой «живой». как в открытом кинотеатре, что ли. смотрел через него сериальчик :)

я не до конца, конечно, понимаю как у вас всё устроено, особенно в той части, где из «лучей» происходит перевод в семплы аудио. думаю, некое подобие шероховатости можно реализовать, если из точки отражения/преломления выпускать по несколько лучей случайной амплитуды, отклонённых на случайный угол, помноженный на коэффициент шероховатости. количество лучей, наверное, должно быть пропорционально площади полигона. и ещё энергию падающего луча надо будет как-то поделить между всеми отражёнными/преломлёнными.

но это так, болтовня анонимуса. не слушайте.

попробую как-нибудь ещё повернуть каждую ступеньку к микрофону или сделать шероховатость мешем. а что? пускай считает :)

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

получилось :) с поворотом каждой ступеньки к источнику, благодаря чему звук отражается обратно в ту самую точку из которой вылетел.

послушать эффект

настройки плагина | 3d-модель (stairs.obj)

3d-модель несколько необычная, такой, своего рода, чит, чтобы приблизить результат расчёта плагина к реальному эффекту пирамиды. кроме того, что ступеньки повёрнуты, модель содержит вторую лестницу, сдвинутую на полступеньки в направлении источника — так имитируется дополнительное отражение, то ли от земли, то ли от перил, которое удваивает частоту эффекта.

во время моих экспериментов несколько раз плагин-таки падал, с сегфолтом. это случалось только после загрузки новой 3d-модели (на третьей модели, обычно). плагин вылетал сразу после нажатия на «запуск». я попробовал в дебаггере посмотреть, но без сборки из исходников, похоже, не разобраться:

...
[New Thread 0x7fffbbfff640 (LWP 99423)]
...
[New Thread 0x7fff717fa640 (LWP 99430)]

[Thread 0x7fff717fa640 (LWP 99430) exited]
...
[Thread 0x7fffbbfff640 (LWP 99423) exited]

[New Thread 0x7fffdbfff640 (LWP 99432)]
Thread 30 "lsp-plugins-roo" received signal SIGSEGV, Segmentation fault.
[Switching to Thread 0x7fffdbfff640 (LWP 99432)]
0x00007ffff766174c in ?? () from /usr/lib64/lsp-plugins/lsp-plugins-jack-core-1.1.30.so
(gdb) bt
#0  0x00007ffff766174c in ?? () from /usr/lib64/lsp-plugins/lsp-plugins-jack-core-1.1.30.so
#1  0x0000000000000000 in ?? ()
(gdb) 

в джеке в этот момент плагин ни к чему подключен не был. джек на падение плагина никакими сообщениями не реагирует.

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

Ого, ну поздравляю.

То, что падал, конечно, не есть хорошо, надо разбираться.

Если есть возможность стабильно воспроизвести, то будет отлично, я могу на своей стороне попробовать.

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

да, воспроизводится стабильно: надо три раза подряд загрузить любую 3д-модель и затем нажать launch.

я подебажил слегка, но так как в коде не разбираюсь, то и не понял причину. что-то связанное с созданием/копированием объекта Scene3D:

Thread 5 "lsp-plugins-roo" received signal SIGSEGV, Segmentation fault.
[Switching to Thread 0x7fffedef7640 (LWP 121723)]
0x00007ffff753d604 in lsp::basic_vector::size (this=0x0) at lsp-plugins-master/include/data/cvector.h:260
260	            inline size_t size() const  { return nItems; }
(gdb) bt
#0  0x00007ffff753d604 in lsp::basic_vector::size (this=0x0) at lsp-plugins-master/include/data/cvector.h:260
#1  0x00007ffff754eb84 in lsp::Scene3D::num_objects (this=0x0) at lsp-plugins-master/include/core/3d/Scene3D.h:97
#2  0x00007ffff754fb53 in lsp::RayTrace3D::TaskThread::generate_root_mesh (this=0x7fffe0000b80) at 3d/RayTrace3D.cpp:377
#3  0x00007ffff7552d2d in lsp::RayTrace3D::TaskThread::prepare_main_loop (this=0x7fffe0000b80, initial=1) at 3d/RayTrace3D.cpp:1347
#4  0x00007ffff755469c in lsp::RayTrace3D::do_process (this=0x7ffff0001110, threads=1, initial=1) at 3d/RayTrace3D.cpp:1922
#5  0x00007ffff7554d2b in lsp::RayTrace3D::process (this=0x7ffff0001110, threads=1, initial=1) at 3d/RayTrace3D.cpp:2038
#6  0x00007ffff76f41ae in lsp::room_builder_base::Renderer::run (this=0x7ffff0000e00) at room_builder.cpp:296
#7  0x00007ffff75bc9ab in lsp::ipc::Thread::thread_launcher (arg=0x7ffff0000e00) at ipc/Thread.cpp:228
#8  0x00007ffff7327299 in start_thread () from /usr/lib/libpthread.so.0
#9  0x00007ffff7b99053 in clone () from /usr/lib/libc.so.6
(gdb) frame 2
#2  0x00007ffff754fb53 in lsp::RayTrace3D::TaskThread::generate_root_mesh (this=0x7fffe0000b80) at 3d/RayTrace3D.cpp:377
377	        for (size_t i=0, oid=obj_id, n=trace->pScene->num_objects(); i<n; ++i, ++oid)
(gdb) p trace
$1 = (lsp::RayTrace3D *) 0x7ffff0001110
(gdb) p trace->pScene
$2 = (lsp::Scene3D *) 0x0
(gdb) 

но самое интересное то, что после этой ошибки, если запустить прогу ещё раз, то она сразу же падает, уже с другим трейсом:

Thread 4 "lsp-plugins-roo" received signal SIGSEGV, Segmentation fault.
[Switching to Thread 0x7ffff5033640 (LWP 122631)]
0x00007ffff763daf4 in avx::sanitize2 (dst=0x5555558cc840, src=0x0, count=256)
    at lsp-plugins-master/include/dsp/arch/x86/avx/float.h:220
220	        ARCH_X86_ASM
(gdb) bt
#0  0x00007ffff763daf4 in avx::sanitize2 (dst=0x5555558cc840, src=0x0, count=256)
    at lsp-plugins-master/include/dsp/arch/x86/avx/float.h:220
#1  0x00007ffff753eb8a in lsp::JACKDataPort::pre_process (this=0x55555557ef90, samples=256)
    at lsp-plugins-master/include/container/jack/ports.h:305
#2  0x00007ffff7540ab5 in lsp::JACKWrapper::run (this=0x7fffffffdcb0, samples=256)
    at lsp-plugins-master/include/container/jack/wrapper.h:316
#3  0x00007ffff754072b in lsp::JACKWrapper::process (nframes=256, arg=0x7fffffffdcb0)
    at lsp-plugins-master/include/container/jack/wrapper.h:212
#4  0x00007ffff70a5912 in ?? () from /usr/lib/libjack.so.0
#5  0x00007ffff7327299 in start_thread () from /usr/lib/libpthread.so.0
#6  0x00007ffff7b99053 in clone () from /usr/lib/libc.so.6
(gdb) frame 1
#1  0x00007ffff753eb8a in lsp::JACKDataPort::pre_process (this=0x55555557ef90, samples=256)
    at lsp-plugins-master/include/container/jack/ports.h:305
305	                        dsp::sanitize2(pSanitized, reinterpret_cast<float *>(pDataBuffer), samples);
(gdb) p pDataBuffer 
$1 = (void *) 0x0
(gdb) 

иногда плагин вообще не удаётся запустить, так как она каждый раз сразу же падает с этим же трейсом. помогает только запуск через strace -f lsp-plugins-room-builder-mono. то есть что-то очень странное. почему так? судя по pDataBuffer = jack_port_get_buffer(pPort, samples); это джек не даёт буфер? или что? … а, точно! плагины из другой коллекции тоже падают. после перезапуска джека всё восстанавливается. непонятно, правда, почему тогда strace -f помогает.

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

да, воспроизводится стабильно: надо три раза подряд загрузить любую 3д-модель и затем нажать launch.

Вот странно, у меня не воспроизводится. room_builder_mono, гружу типовые модели. Может, всё-таки не любые 3D-модели?

#1  0x00007ffff754eb84 in lsp::Scene3D::num_objects (this=0x0) at lsp-plugins-master/include/core/3d/Scene3D.h:97
#2  0x00007ffff754fb53 in lsp::RayTrace3D::TaskThread::generate_root_mesh (this=0x7fffe0000b80) at 3d/RayTrace3D.cpp:377

this == NULL, это очень странно, такое ощущение, что прилетела кривая сцена на вход (pScene == NULL).

Но тогда бы мы грохнулись раньше, на:

status_t RayTrace3D::set_scene(Scene3D *scene, bool destroy)

Попахивает каким-то memory corruption. Неплохо бы через valgrind всё это прогнать с опцией memcheck.

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

Может, всё-таки не любые 3D-модели?

я пробовал несколько. и простой шарик и кубик. экспортировал из блендера как отдельный объект, так и сцену целиком. я ещё потещу попозже.

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

Может, всё-таки не любые 3D-модели?

да, точно. не любые. если в параметрах экспорта убрать галочку write normals (картинка), то плагин будет падать, а если галочку оставить (по дефолту она стоит), то всё ок, плагин не падает.

на всякий случай сохранил два варианта сцены с шариком: с нормалями и без нормалей. плагин падает на файле без нормалей.

Неплохо бы через valgrind всё это прогнать

я, к сожалению не знаком с валгриндом, а разбираться, если честно, не очень хочется. если, конечно, сильно критично, то могу как-нибудь установить и поизучать.

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