Утеплитель (1 онлайн

belovw

Well-Known Member
22 Апр 2009
9.228
8.406
113
50
RK Almaty
Пить уже было нечего, кушать тоже, спать не хотелось. Написал плагину формата JS для Рипера - утеплитель, основанный на апроксимации точек. В основе алгоритма использовал многочлен пятого порядка. Стандартные настройки по умолчанию. Добавляются третья и пятая гармоника. Третья добавляется в противофазе. Динамических воздействий на сигнал нет.

Слушайте, оценивайте. На лавры не претендую.

На графике передаточная характеристика при дефолтных настройках и увеличении выходной громкости на +4,44 дБ
на входе сигнал принудительно ограничивается
при X>1 X=1
при X<-1 X=-1

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

У меня получился чистой воды транзисторный "утеплитель". Если посмотреть исходник то будет видно что четные коэфиценты запланировны, но пока что находятся под коментом в нерабочем состоянии.
desc:Warmer

slider1:0<-100,100,0.01>amaunt
slider2:0<-100,100,0.01>1"
slider3:-6<-100,100,0.01>3"
slider4:-20<-100,100,0.01>5"
slider5:0.5<-100,20,0.01>Level

@init
bpos=0;

@slider
am=pow(10,slider1/20);
sl1=pow(10,slider2/20);
sl3=pow(10,slider3/20);
sl5=pow(10,slider4/20);
lv=pow(10,slider5/20);

@sample
spl0=spl0*am;
spl1=spl1*am;
x=max(min(spl0,1),-1);
y=max(min(spl1,1),-1);
//spl0=sl1*x+sl2*x*x-sl3*x*x*x+sl4*x*x*x*x+sl5*x*x*x*x*x;
//spl1=sl1*y+sl2*x*x-sl3*y*y*y+sl4*x*x*x*x+sl5*y*y*y*y*y;
spl0=((sl5*x*x-sl3)*x*x+sl1)*x;
spl1=((sl5*y*y-sl3)*y*y+sl1)*y;
spl0=spl0*lv/am;
spl1=spl1*lv/am;

Для того что бы использовать его в качестве VST плагины нужно с офсайта скачать Reaplugins. После установки добавить мою плагину в папку reaplugs/JS/Effects
после в хосте загрузить Reajs плагин и выбрать нужную из списка (т.е. мою) плагину.

ЗЫ: Похоже получился мягко подсерающий клипер. В любом случае жду рецензий.
 

Вложения

Последнее редактирование:

belovw

Well-Known Member
22 Апр 2009
9.228
8.406
113
50
RK Almaty
Прошел только день, на первый взгляд особой разницы от плагины не слышно. Субъективно звук становится как бы открытым и, прозрачнее что ли если конечно не доводить до явного перегруза.
Хочется услышать мнения других участников форума кто юзает рипер и тех кто использует reajs.dll
 

]Den[

دينيس
1 Июл 2010
487
251
63
А можно ли его как-то скомпилировать в .dll чтоб можно было в других хостах (кубейс, сонар и т.д...) проверить работу этого плагина?
 

belovw

Well-Known Member
22 Апр 2009
9.228
8.406
113
50
RK Almaty
]Den[;1234700 написал(а):
А можно ли его как-то скомпилировать в .dll чтоб можно было в других хостах (кубейс, сонар и т.д...) проверить работу этого плагина?
Только для PC: Нужно с офсайта скачать Reaplugins. После установки добавить мою плагину в папку reaplugs/JS/Effects
после в хосте загрузить Reajs плугин и выбрать нужную из списка (т.е. мою) плугину.
 
Последнее редактирование:

parfumer

саксофонист
13 Дек 2004
2.040
422
83
Таллинн
Посетить сайт
belovw,
Дружище, не мог бы ты популярно объяснить, что делает каждая из регулировок?
Например,
1``
3``
5``
И какой смысл в их отрицательных значениях, кроме Level?
Для себя я пока выяснил, что искажения получаются разные, но в разряд "утеплителей" отнести их никак не могу.
Даже слегка в растерянности, где бы я смог эту обработку применить... :)
[HIDE="10"]
PS. Опять, кстати, рискуешь- насчет дублирования тем.[/HIDE]
 
Последнее редактирование:

belovw

Well-Known Member
22 Апр 2009
9.228
8.406
113
50
RK Almaty
что делает каждая из регулировок?
Это коэфиценты многочлена
y=a1*x1-a3*x^3+a5*x5.
По дефолту они дают форму кривой как на картинке. a1 трогать не нужно, это как бы dry. А вот 3" и 5" как оказалось добавляют гармоники третьего и пятого порядка.

Пропусти нормализованную под ноль фанеру через него и увидешь что пики упали до -4,44 дБ, а субъективная громкость не упала. Потом третья гармоника как говорят это от лампы.
Покрути плагину в дефолте настраивая только amount, прибавляй до перегруза, а потом мягко отпусти что бы он пропал. Включи байпас и сравни. Звучание особо не меняется, но мне это влияние нравится. Как буд-то после него звук раскрывается. Дальше видно будет.

По поводу дублирования тем: всё понимаю, но это вынужденое действие к привлечению аудитории, потом на дублировании я не попадался. Плагина написана для Рипера, поэтому и оформлена в теме Рипера, но также может использоваться как VST в других хостах под PC, поэтому там и дал линк на тему, а линк не есть повтор. В любом случае для людей стараюсь.
 
Последнее редактирование:

parfumer

саксофонист
13 Дек 2004
2.040
422
83
Таллинн
Посетить сайт
belovw,
Но я как раз и спрашиваю: какой смысл в минусовых значениях?
Те операции, что ты описывал, я как раз и производил с ним. Если не ошибаюсь, "теплые" гармоники как раз- четные. А тут прям такой ядреный транзистор получается...
Еще: очень грубо двигаются фейдеры, может, логарифмическую регулировку для них сделать?
А вот с этим: "коэфиценты многочлена", не издевайся, да? :)
 
  • Like
Реакции: belovw

belovw

Well-Known Member
22 Апр 2009
9.228
8.406
113
50
RK Almaty
очень грубо двигаются фейдеры, может, логарифмическую регулировку для них сделать?
Они и так к дБ привязаны для удобства. Для мягкости используй <Ctrl>.

какой смысл в минусовых значениях?
Минусовый значения в дБ не есть минусовый коэфицент. Например -6 дБ=0.5, а -20 дБ=0.1

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

Исходя из последних новостей поправлю топ.
 

belovw

Well-Known Member
22 Апр 2009
9.228
8.406
113
50
RK Almaty
parfumer, Спасибо за анализ. Спасибо за то что натолкнул меня на изучение принадлежности гармоник транзистору и лампе. Буду копать дальше. Вообще в коде изначально были прописаны чётные коэфиценты, но они ведут себя пока что не контролируемо и потому закоментированы, т.е. отключены. Буду копать дальше. А пока придумай другое название для этой плагины. Мне например нравится её сёр на нечетных гармониках - SSL-ем попахивает :prankster2:
И юзай-юзай её по дефолту (только amount крути). Может чего нового и услышишь. А там глядишь в тему старперы помладше подключатся-проще будет )))
 
Последнее редактирование:

Vayson

Active Member
1 Янв 2009
222
132
43
Большое спасибо автору за наводку на ReaJS.
Это просто находка) Работать со звуковой волной на простейшем javascript, да еще и не заморачиваясь над всякими заголовками, определениями, структурой и пр. присущими кодингу, а сразу работать над алгоритмом - это просто потрясающе) Просидел всю ночь, настолько затянула эта игра с переменными, функциями и этими многочленами (к этому со школьных уроков алгебры отвращение, не переваривал ничего). Пришлось повозиться с википедией

Написал для себя пару простейших скриптов (но нужных и отсутствующих в наборе):
Инвертер волны (x=0-x);
Биткрашер (floor((x+(1/(bt*2)))*bt))/bt);
Синусный Утеплитель (x=sin(x)-x+sin(x));

По поводу работы автора сказать что-либо трудно... (мне мой синусный больше понравился :prankster2: )
Добавлю лишь, что ежели вы хотите эмуляцию лампы, Nick Crow (разработчик TubeDriver) рассказал бы много больше. Лампа, кстати, даже верхнюю и нижнюю полуволны "драйвит" по-разному
 

Windcatcher

New Member
16 Ноя 2010
25
4
0
36
windcatcher.promodj.ru
Спасибо ! Я пожалуй буду пользоваться.
я использовал Вармер на драм-лупе (состоящем в основном из разного рода бочек грузных и не очень) ДнБэшном... бочка приобрела подходящую для меня сатурацию, при дефолтных значениях... двигать что-либо в этом плагине надо очень аккуратно, после него я поставил лимитер. - все норм.

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

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

На мой взгляд, для пущего удобства тюнинга - хорошо б было значения передвигаемого ползунка уменьшить... то есть, что б изменения измерялись не в "еденицах", а в "ноль целых, икс десятых" - а то как рванешь вправо - как захрипит, и приходится очень медленно передвигать...
Понятно ли что я хотел сказать? =)

Спасибо, здОрово !
 
  • Like
Реакции: belovw

belovw

Well-Known Member
22 Апр 2009
9.228
8.406
113
50
RK Almaty
По поводу работы автора сказать что-либо трудно... (мне мой синусный больше понравился
Анализатор показал с Вашей формулой на синусе третью гармонику.

Почитал
Nick Crow (разработчик TubeDriver)
после этого все мои изыски - детский лепет на фоне 2012. Аж растроился. Одно умиляет - Москва не сразу строилась.



На мой взгляд, для пущего удобства тюнинга - хорошо б было значения передвигаемого ползунка уменьшить... то есть, что б изменения измерялись не в "еденицах", а в "ноль целых, икс десятых" - а то как рванешь вправо - как захрипит, и приходится очень медленно передвигать...
очень грубо двигаются фейдеры, может, логарифмическую регулировку для них сделать?
Они и так к дБ привязаны для удобства. Для мягкости используй <Ctrl>.
Шаг изначально выставлен на 0.01. Удерживай <Ctrl>
Диапазон регулировок поменяю исходя из запросов пользователей.

Спасибо за проявленное внимание.
 
Последнее редактирование:

belovw

Well-Known Member
22 Апр 2009
9.228
8.406
113
50
RK Almaty
попробуйте.
y=x-k3*x^3+k5*x^5

вместо k3 можно использовать А=0,5 по дефолту
вместо k5 - В=0.1
диапазон регулировок для А и В 0...1
 
Последнее редактирование:

timbo

Well-Known Member
3 Окт 2007
1.627
641
113
А как делай сделать не разбирался?
А то мне дифференциатор и интегратор надо сделать, а как в память загонять предыдущий отсчет я не понял((
Читал исходники делея, но моему непронраммерскому мозгу это сложновато сходу осилить.
 

Vayson

Active Member
1 Янв 2009
222
132
43
В @sample пишете в массив buff[0]=spl0 и buff[1]=spl1
В конце пишете buff+=2 и проверку на его заполненность buff>=buffsize ? buff=0;
Где buffsize размер массива (его отсчитывают относительно частоты дискретизации - srate)

Это все просто... Глядя на некоторые сложные алгоритмы, даже у тех же в комплекте, у меня дух захватывает...
 
Последнее редактирование:
  • Like
Реакции: timbo

belovw

Well-Known Member
22 Апр 2009
9.228
8.406
113
50
RK Almaty
А как делай сделать не разбирался?
Разбирался. В ORTF панере как раз на основе делея и создаётся задержка каналов. Кстати поюзайте. Итересно себя ведёт. На первый взгляд всё как обычно, но если рядом включить трек только с интенсивностым панарамированием то разница становится очевидной, а в чью пользу решать вам.
Vayson, расписал как сделать задержку !!!!

Пример дифференциатора

desc: Dif

@init
xl=0;
xr=0;

@sample
spl0=spl0-xl;
spl1=spl1-xr;
xl=spl0;
xr=spl1;
Надо ещё коэфицент самплрейт вставить, а для этого матчасть читать надо, чуть позже допилю. С интегратором посложнее будет, надо будет решить задачку защиты от переполнения. Подключайтесь ребята. Кружок начинающего программиста DSP начал своё функционирование. :girl_witch:
 
Последнее редактирование:
  • Like
Реакции: dizzy gillespie и timbo

timbo

Well-Known Member
3 Окт 2007
1.627
641
113
Пример дифференциатора
Хех, я и не думал, что так просто))

С интегратором посложнее будет, надо будет решить задачку защиты от переполнения.
Там бы надо HPF вставить с очень низкой частотой среза, чтобы DC не было, это и будет защитой от переполнения. Правда такой фильтр не спасает от кратковременных забросов, так что разумно на выходе поставить клиппер.

Вообще, зачем я это все задумал — если внутрь цепи дифференциатор-интегратор поставить ограничение или вейвшейпер по типу того, что вы описали, то получается ограничение волны по производной, что смегчает транзиенты. Если злоупотреблять то получается очень характерный "глухой" дисторшен.
Сам по себе эффект может и не имеет большой ценности (хотя всегда хочется больше эффектов хороших и разных:biggrin:), но недавно я обнаружил очень толковое применение ему — прогнал через него сигнал для сайдчейна компрессора. ОЧЕНЬ понравилось, особенно на полном миксе! Звук стал менее нервным, стало возможно куда сильнее жать без ощущения расплющивания.
Сейчас для этого использую цепочку из пяти плагинов:fool: — дифференциатор, вейвшейпер, интегратор, HPF, клиппер, но хотелось бы все собрать под одной крышей и добавить настроек.
Буду копаться в JS.
Но может кто здесь реализует идею до конца?
 

timbo

Well-Known Member
3 Окт 2007
1.627
641
113
В общем копался вечером. Задача оказалась гораздо труднее, чем я полагал.
Кстати, в SynthMaker'e год назад делал цепочку по отдельности, все работает. Только сильно не эффективно, видимо синтмейкер в каждую .длл'ку много чего ненужного тащит.
В процессе случайно сделал эквалайзер :rofl:
 

Vayson

Active Member
1 Янв 2009
222
132
43
Vayson, расписал как сделать задержку !!!!
Я расписал всего лишь как заполнить буфер предыдущими отсчетами. А с ним уже можно делать все что душе угодно (предполагая, что автор разберется), включая и делей ( spl0=spl0+(buff[delay]*volume) )

Подключайтесь ребята. Кружок начинающего программиста DSP начал своё функционирование. :girl_witch:
Ура) Глядишь скоро на kvraudio русские засветятся

В процессе случайно сделал эквалайзер :rofl:
Бывает :sarcastic:

P.S. Распишите пожалуйста, что такое интегратор, простыми словами
Еще плоховато представляю себе, что происходит с сигналом, проходящим через дифференциатор...
 
Последнее редактирование:

belovw

Well-Known Member
22 Апр 2009
9.228
8.406
113
50
RK Almaty

timbo

Well-Known Member
3 Окт 2007
1.627
641
113
Распишите пожалуйста, что такое интегратор, простыми словами
Еще плоховато представляю себе, что происходит с сигналом, проходящим через дифференциатор...
Ну тут несколько вольное обращение с терминами, но, насколько могу судить, распространенное.
В общем дифференциатор считает производную волны, интегратор -- интеграл. Т.к. волна у нас дискретная, то вместо производной -- конечная разность, а вместо интеграла -- сумма.
Т.е. дифференциатор считает для каждого отсчета -- out=input-input[i-1], интегратор out=input+input[i-1].
Соответственно, поставленные друг за другом, они должны взаимно компенсироваться, с точностью до DC.
Вот этого у меня и не получилось, причем даже тогда, когда я, чтобы не возиться с логикой, сделал отдельными плагинами дифференциатор и интегратор.
В Synthedit'е же получалось.
 

belovw

Well-Known Member
22 Апр 2009
9.228
8.406
113
50
RK Almaty
В общем дифференциатор считает производную волны, интегратор -- интеграл. Т.к. волна у нас дискретная, то вместо производной -- конечная разность, а вместо интеграла -- сумма.
Всё верно, но не хватает одного множителя.
Значит так, производная это изменение функци за бесконечно малый промежуток времени (вроде так)
X'=dX/dt=X1-X0/t1-t0
самый малый промежуток который мы можем использовать это растояние между двумя близжайшими семплами. В нашем случае:
dt=1/Fd, Fd-частота дискритизации, берётся из системной переменной srate поэтому dt=1/srate =>
desc: Dif

@init
xl=0;
xr=0;

@sample
spl0=(spl0-xl)srate;
spl1=(spl1-xr)srate;
xl=spl0;
xr=spl1;
 
Последнее редактирование:

timbo

Well-Known Member
3 Окт 2007
1.627
641
113
самый малый промежуток который мы можем использовать это растояние между двумя близжайшими семплами.
Это верно. Правда, для практических целей это не так важно, т.к. в общем случае будет нормировочным множителем (т.е. если в дифференциаторе умножаем, то в интеграторе делим). Хотя, если задаться целью, чтобы плагин был независим от семплрейта, то покопаться в этом направлении, вероятно, стоит. Я же пока не преследовал этой цели.
Да, выводить на выход семпл, умноженный на 44100, как-то рискованно:wink:
 

Vayson

Active Member
1 Янв 2009
222
132
43
Я гуглил в первую очередь. Хотел простыми словами
Что делает код мне тоже понятно. Непонятно - что происходит со звуковой волной при прохождении через дифференциатор (интегратор) на длительном промежутке времени, потому что каждый следующий цикл зависит от результата работы предыдущего...
И еще самое главное - зачем они нужны, и каковы цели его применения :to_pick_ones_nose:

Да, выводить на выход семпл, умноженный на 44100, как-то рискованно:wink:
Предположение - может не стоит его выводить? дифференциатор (с умножением на srate), внутренняя обработка, интегратор (с делением на srate)
 
Последнее редактирование:

timbo

Well-Known Member
3 Окт 2007
1.627
641
113
Непонятно - что происходит со звуковой волной при прохождении через дифференциатор (интегратор) на длительном промежутке времени
Он как фильтр низких частот работает. Фактически, все, что ниже fs/2 пропорционально режется (с очень плавным наклоном).

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


Предположение - может не стоит его выводить? дифференциатор (с умножением на srate), внутренняя обработка, интегратор (с делением на srate)
Ну в ём тадыть и смысла особого нет.
Этот коэффициент ничего с окраской звука в любом случае не сделает.
 

belovw

Well-Known Member
22 Апр 2009
9.228
8.406
113
50
RK Almaty
если задаться целью, чтобы плагин был независим от семплрейта, то покопаться в этом направлении, вероятно, стоит
Пока мы работаем с такой штукой как дельта те, то без срате ни как. Бояться нечего, при перегрузе рипер сам отключит выход. В любом случае дельта те нужна.
 

timbo

Well-Known Member
3 Окт 2007
1.627
641
113
Пока мы работаем с такой штукой как дельта те, то без срате ни как.
Нас строго говоря никто не обязывает дельта т учитывать.

Бояться нечего, при перегрузе рипер сам отключит выход.
А он гарантированно отключит, если на 44100 умножать. Можно на srate/44100 умножать, допустим.

В любом случае дельта те нужна.
Часто обходятся и без нее. Она нужна только если требовать инвариантность от семплрейта.
Для отработки можно обойтись, да и для моих нужд лучше один раз нормировать вейвшейпер, чем два раза дифференциатор и интегратор.
 

timbo

Well-Known Member
3 Окт 2007
1.627
641
113
Ну да, а ещё можно вышмат переписать на новый лад. ))))
А тут никакого вышмата, и нечего его упоминать всуе.
Есть, скажем, такая задача -- если семпл к семплу сигнал прыгает от -1 до 1, то это может быть нехорошо и надо ему помешать. Вот тут нам понадобится разность отсчетов. Если умножать на srate то получим 88200 -- т.е. на 50 дБ больше, чем 0dBFS. И зачем нам эту ерунду городить?

Кстати 44100/srate даст 1 (единицу)
Это если srate у нас 44100.
 

Сейчас онлайн (Пользователей: 0, Гостей: 1)