Канал для поиска исполнителей для разных задач и организации мини конкурсов
Last updated 2 месяца, 4 недели назад
Новые и перспективные Web3 игры с добычей токенов.
Чат: https://t.me/Crypto_Wolf_Chat
Правила чата смотрите в описании чата.
Все свои вопросы направляйте в чат или главному модератору чата: @Exudna_118
По теме сотрудничества: @Zombini
Last updated 2 месяца, 2 недели назад
^ jsfx-плагин к посту
На днях Бен Джордан на своем Youtube канале выпустил ролик с провокационным названием: “Мы доказали это: ИИ мастеринг — пустая трата денег”. Идея ролика в том, что с помощью 472 “судей” провели двойное слепое тестирование различных вариантов мастеринга трека, как с использованием систем автоматического мастеринга (включая “умные” режимы в плагинах, например в Ozone), так и с использованием настоящих мастеринговых инженеров. Первые два места заняли “живые” люди, а вот третье место досталось бесплатной системе с открытым исходным кодом “Matchering”.
Я видимо достаточно далек от темы, поскольку никогда про эту систему не слышал. Первый вопрос, который у меня возник: “Какой лимитер она использует?” Открыв исходный текст, я увидел, что используется собственный лимитер под названием “херакс” (лат. Hyrax). Мысленно поаплодировав за выбор названия, я с не меньшим удивлением обнаружил, что автор “Matchering” — Сергей Гришаков (Москва, Российская Федерация).
Далее я стал из любопытства разбирать, как этот лимитер работает, и был немного удивлен используемым решениям.
Из моего опыта общения с инженерами, я условно делю людей по способу мышления на три категории:
1. Программисты. Представляют любой процесс в виде алгоритма, то есть последовательности действий с различными условиями.
2. Схемотехники. Любой процесс представляют в виде принципиальной схемы (токи, напряжения, конденсаторы, операционники и т.д.).
3. Математики. Представляют любой процесс в виде формул (а еще любят матрицы и MatLab).
Например, берем реализацию атаки/восстановления в компрессоре. Программист: если сигнал больше сохраненного состояния, то используем атаку, иначе используем восстановление. Схемотехник: схема с диодом, резисторами и конденсатором, который заряжается и разряжается.
“Hyrax” написан математиком, и поэтому там нет переключения между атакой и восстановлением, зато есть максимум между двумя векторами. Исходный файл представляется в виде вектора чисел, над которыми производятся различные операции. Обрабатывается сразу весь файл целиком.
Самое интересное решение: для сглаживание атаки применяется простой фильтр в 6 дБ на октаву, но примененный два раза: в прямом и обратном направлении. Это дает линейную фазу и фильтр в 12 дБ на октаву с Q=0.5.
Можно ли использовать такой алгоритм в плагине? Если фильтр с бесконечной фазовой характеристикой применить в обратном направлении, то получается, что атака начинается за бесконечное время до события. Но надо ли это? Всегда возможно “обрезать” импульсную характеристику, и тем самым привести бесконечную импульсную характеристику к конечной. Что я и сделал — “обрезал” затухающую характеристику в обратном направлении в точке -120 дБ. В результате такой алгоритм может работать в плагине.
JSFX-плагин, реализующий “хиракс” лимитер, во вложении. К слову, такая атака очень интересно и необычно звучит. Для меня — отличная находка.
Для тех, кто как и я, в первый раз слышит об этом проекте, вот интервью разработчика от января прошлого года:
^ JSFX-плагин к посту
JSFX-плагин к посту ^
После того, как я в десятый раз за неделю наткнулся на упоминание этого плагина из 2011, я решил, что отличная мысль — его разобрать. Итак Sausage Fattener от Dada Life.
Первое, что я увидел — обрезной фильтр низких частот не обновляется при смене частоты дискретизации. То есть 20-30 Гц на 44.1 кГц превращаются в 40-60 Гц на 88.2 кГц. Та же проблема присутствует и в более новой версии — на картинке 2 показана характеристика обоих версий на 88.2 кГц. Более того, между версиями видно небольшое отличие в “горбе” на графике. Сразу скажу, что я рассматривал первую (левую на картинке) версию.
Структуру плагина можно представить следующим образом:
эквалайзер -> компрессор -> софт-клиппер
Эквалайзер представляет собой фиксированный обрезной фильтр низких частот (два фильтра 12 дБ на октаву на 20 Гц и на 30 Гц) и “колокол”, частота и уровень которого зависят от ручки “COLOR” (характеристика на картинке 3).
У компрессора: порог и выходной makeup уровень зависят от параметра FATTNESS. Порог: -1 .. -35 дБ. Выходной уровень: +1 .. +39 дБ.
Атака и восстановление: 2.69 мс и 32.9 мс. Степень: 10:1.
Компрессор реализован не в логарифмической, а в линейной шкале: если в классическом компрессоре применение степени компрессии происходит в децибелах, то тут проще сказать, что в процентах.
Далее идет софт-клиппер на 0 dBFS. Начало колена зависит от параметра COLOR и меняется от 90% до 100% (то есть до хард-клиппинга).
На выходе плагина сигнал изменяется на фиксированные -0.1 дБ. Ручка “gain” меняет входной уровень сигнала (до эквалайзера).
“Горб” на амплитудно-частотной характеристике, который я упоминал в начале, есть следствие наложение софт-клиппинга на измерительный импульс (то есть в реальности он отсутствует).
Характеристика гармонических искажений плагина выглядит очень “грязной” — это следствие использование 32-битной арифметики с плавающей точкой и обрезных фильтров для низких частот — сказываются ошибки округления. В JSFX-плагине во вложении такого эффекта нет.
Вроде бы и все.
Но в какой-то момент я сообразил, что они реализовали feedforward топологию вместо feedback! То есть вся эта сложность от того, что они попытались воспроизвести зависимость времени восстановления от сигнала, как в feedback топологии, но в feedforward компрессоре! Это мне показалось настолько противоестественным, что я решил не доводить дело до конца (то есть в этот раз без JSFX копии, может быть доделаю когда-нибудь потом).
Из интересного по внутренностям: выходной усилитель не промоделирован (как и у Softube CL1B, который я рассматривал в прошлый раз). “Ламповые” гармоники подмешиваются к выходному сигналу в зависимости от уровня компрессии (как в Thrillseeker VBL). Стерео-линк сделан через max() левого и правого сигнала, что в данном случае некорректно.
Еще в аналог первых двух ламп (по “оранжевой ветке”) они в своей модели подают не аудиосигнал, а его огибающую. Для цифровой реализации это позволяет бороться с алиасингом и получить более чистый звук, но интересно, что замешиваются два детектора: 75% пикового и 25% — RMS. Те четыре детектора огибающей, про которые я упомянул выше, эмулирующие оптокомпрессию, не RMS (по логике, для эмуляции оптопары детекторы должны быть RMS, но честно говоря, это надо бы проверить).
В целом по звучанию CA-2A — хороший компрессор. Видно, что старались подогнать звук и поведение под оригинал, но на мой взгляд внутренность переусложнена.
Мы так быстро вошли в тему оптокомпрессоров с CL1B, что толком не начали с LA-2A. Предлагаю немного вернуться.
Итак, LA-2A (картинка 1) — самый классический ламповый оптокомпрессор, актуальный и по сегодняшний день. Он очень удобен в использовании благодаря всего двум ручкам — порогу срабатывания (PEAK REDUCTION) и выходному уровню (GAIN). Даже в мире плагинов, если на какой-то дорожке требуется быстро подправить динамику, эмуляция LA-2A — первый выбор. Из-за минимальных органов управления LA-2A часто рекомендуется в “быстрых” миксах, когда нужно не зарываясь в детали и не теряя общую картину из вида, преобразовать мультитрек во что-то удобоваримое.
В свое время фирма UREI выпустила варианты развития LA-2A — оптокомпрессоры LA-3A на тразисторах (картинка 2) и LA4 на операционных усилителях (картинка 3). Хотя они используют ту же самую оптопару, и сама компрессия должна быть равнозначной, они не получили такой популярности.
Я нашел удобоваримую схему LA-2A (картинка 4). Давайте ее быстро посмотрим и ответим на вопрос: является ли LA-2A компрессор feedforward или feedback?
По картинке: входной сигнал (зеленая линия) уходит в схему компрессии (оранжевая линия), проходит пару ламп, формирующих порог срабатывания, затем лампу-усилитель, затем на излучатель, свет из которого влияет на фоторезистор (красная линия). Чем больше света, тем больше сигнала уходит “на землю”, то есть больше уменьшения уровня сигнала. Затем сигнал (зеленая линия) дальше идет на выходной ламповый усилитель и на выход.
Вроде бы на первый взгляд это feedforward компрессор — сигнал берется с входа, получается сигнал уменьшения уровня, затем он после этого применяется на входной сигнал, чтобы получить выходной. Так?
А вот и нет. В аналоговой схеме точки A (из которой уходит оранжевая линия) и B (где фоторезистор) — это суть одно и то же. Они “скованные одной цепью”, а если включить переключатель COMPRES/LIMIT, то это вообще одна точка. То есть по оранжевой линии уходит уже скомпрессированный сигнал, а это значит, что это feedback компрессор.
Если мы вынесем выходной усилитель “за скобки”, т.к. он не влияет на саму компрессию, и подумаем про разницу в звуке компрессии между LA-2A, LA-3A и LA4, то несмотря на использование одной и той же оптопары разница должна быть. В случае LA-2A на “колено” компрессии влияет характеристика первой пары ламп по “оранжевой ветке”, а на сатурацию сигнала компрессии вторая лампа там же. Чем больше компрессии — тем больше гармоник она вносит в управляющий сигнал. Что-то подобное мы видели в Thrillseeker VBL (гармоники, управляемые сигналом GR).
В компрессоре CL1B, как основанном на LA-2A, управляющая схема однако сделана на операционных усилителях и транзисторах. В частности первой паре ламп на “оранжевой ветке” там соответствуют операционники с диодами, а вместо второй лампы — JFET транзистор. (Кто знаком с гитарными педалями, возможно знает, что звучание JFET транзистора немного напоминает звучание лампы).
Последний вопрос по схеме: резистор R37 на схеме (в желтом круге) с надписью “LIMITER RESPONSE”. Этим резистором можно сделать подъем на частоте 15 кГц, то есть компрессор будет компрессировать эти частоты больше. (Опять таки что-то подобное мы уже видели в Thrillseeker VBL). Я бы относился к этому, как к де-эссеру “для бедных”.
Существует множество плагинов-эмуляций LA-2A. Я решил посмотреть на внутренности Cakewalk CA-2A от 2016 года (картинка 5) и сразу обратил внимание на очень сложную схему получения динамического времени восстановления: 4 детектора, отдельный детектор, который применяет атаку/восстановление на динамическое время восстановления, сложные формулы (а не кусочно-линейные таблицы, как у Softube).
JSFX-плагин к посту ^
Канал для поиска исполнителей для разных задач и организации мини конкурсов
Last updated 2 месяца, 4 недели назад
Новые и перспективные Web3 игры с добычей токенов.
Чат: https://t.me/Crypto_Wolf_Chat
Правила чата смотрите в описании чата.
Все свои вопросы направляйте в чат или главному модератору чата: @Exudna_118
По теме сотрудничества: @Zombini
Last updated 2 месяца, 2 недели назад