JS плагины, Скрипты, тэмплэйты - которые ищем

Тема в разделе "Reaper", создана пользователем Aleksandr Oleynik, 21 янв 2014.

  1. Aleksandr Oleynik

    Aleksandr Oleynik Well-Known Member

    Регистрация:
    16 янв 2007
    Сообщения:
    16.902
    Симпатии:
    9.160
    Пол:
    Мужской
    Адрес:
    Киев
    Мне кажется, что было бы не плохо объеденить все поиски каких либо алгоритмов или плагинов в одной ветке.
    Также можно было-бы и обсуждение по поводу нужности того или иного прцесса (алгоритма) делать в одном месте, так как сейчас эти обсуждения разбросаны по всему разделу.

    Если Модераторы посчитают идею ценной, этот первый пост резервирую под описание более подробное того, что стоит постить в этой ветке.

    [MOD]ок :)[/MOD]
     
  2. Aleksandr Oleynik

    Aleksandr Oleynik Well-Known Member

    Регистрация:
    16 янв 2007
    Сообщения:
    16.902
    Симпатии:
    9.160
    Пол:
    Мужской
    Адрес:
    Киев
    Давно и без успешно ищу более продвинутый способ задачи характеристики изменения параметров при использовании Модуляций.
    В общем-то в модуле Parameter Modulation (особенно от Audio) достаточно много настроек, чтобы создать нужную зависимость изменения выходного параметра от входного, даже какую-то кривую можно построить.
    НО! Когда речь идёт о ТОЧНОМ соответствии входного и выходного параметра по определённому, не линейному закону и масштабу, модуль с этим справится не в состоянии вообще.
    если бы в поле построения кривой можно было ставить доп точки и их значения задавать численно, то ещё куда ни шло, а так - не годится.
    Ну и тем более не годится модуль линковки параметров, а он чаще других и нужен!

    Собственно вопрос, может кто-то встречал такой JS плагин, который бы делал продвинутый РеМапинг входного и выходного параметра. Ну или не JS, в общем если такой РеМапинг можно делать между параметрами VST плагина за которые потом можно зацепиться Риперовской модуляцией - тоже подошёл бы.
    Ну вот посмотрите какие кривые изменения выходного уровня от входного можно создавать в той-же Мелде -

    [​IMG]

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

    А может наши умельцы такой плаг напишут?
    Выглядеть это могло бы по простому так -
    два слайдера входного и выходного параметра связанные между собой через кривую, которую можно было-бы строить рядом горизонтальных слайдеров (думаю 10-20 хватило-бы) у которых движёк слайда и был бы точкой кривой, а между этими точками - обычное сглаживание.
     
  3. belovw

    belovw Well-Known Member

    Регистрация:
    22 апр 2009
    Сообщения:
    5.210
    Симпатии:
    3.422
    Род занятий:
    Звукорежиссура
    Адрес:
    RK Almaty
    У меня была схожая задача, застрял на сглаживание. Не могу вспомнить, найти, разработать механизм по которому восстанавливается функция исходя из опорных точек. Толи полином Ньютона, толи Лагранжа, толи интерполяция. Вышмат проходил в начале 90-ых - подзабыл однако. Напомните пожалуйста и быстро накидаю плагин для подобных задач. Зуб даю.
     
  4. Aleksandr Oleynik

    Aleksandr Oleynik Well-Known Member

    Регистрация:
    16 янв 2007
    Сообщения:
    16.902
    Симпатии:
    9.160
    Пол:
    Мужской
    Адрес:
    Киев
    Сглаживание нужно делать по самой распостранённой методике - по кривой Бизье.
    Собственно тут всё про них -

    http://ru.wikipedia.org/wiki/Кривая_Безье

    Тут вот тоже есть немнеого -
    http://www.codenet.ru/progr/alg/B-Splines/
    http://habrahabr.ru/post/130873/


    PS: нужно позвать в тему Ortseam

    PSS: Я может поясню чуть подробнее задачу и может кто-то в ней увидит и свои не сильно удобно решавшиеся проблемы.

    Нужно осуществить управление опорной частотой Динамического Эквалайзера, перемещая её по координате частоты строго за снимаемым с сигнала питчем.
    Была тут тема, нашли Анализатор, который во вне выдаёт в риал тайме этот параметр Питч.
    Это Blue Cat's FreqAnalyst Pro
    В качестве Динамического Эквалайзера решил использовать самый из них продвинутый с сайд чейном Melda MDynamicEq.
    Линкуем через модуляцию в Рипере одну из опорных точек бэнда в MDynamicEq к выходному параметру Centr Pitch от FreqAnalyst Pro.
    Всё пашет, но шкалы этих двух плагинов по частоте не совпадают СОВСЕМ, ну вообще.
    Во-первых у одного диапазон 10Hz-22 kHz, а у второго 20Hz-2-kHz, во-вторых, как это ни странно, а и разбивка шкалы частоты у них тоже совершенно разная.
    Вот и получается, что даже если офсетом подстоить совпадение частоты, то приуходе с неё совпадение рушится.

    Что я сделал (через задницу конечно и хотелось бы так не делать) -
    В своей любимой Bidule я построил схему преобразования DATA сигнала от управляющего к управляемому через два элемента -
    собственно модуль формулы и подобрал наиболее близкую пораболу (получилось y=x^(1.29), а потом последовательно поставил Мелдовский же Шейпер - MWaveShaper в котором можно ставить на кривой уровня любое кол-во точек и сглаживать кривую.
    Ну вот задавал входную частоту и подставивал выходную, перемешая соответсвующую диапазону точку.
    Получилось вот такое -
    [​IMG]

    Ну вот было-бы круто сделать JS плаг у которого был бы входной слайдер, к которому можно было бы привязывать внешнее воздействие,
    выходной слайдер от которого можно было-бы управлять чем-то,
    и связны они между собой были бы через прописываемую формулу (или на крайняк выбор серий парабол вогнутых и впуклых)
    И вот таким частоколом слайдеров (думаю 12-и достаточно), которые бы своими рычажками строили кривую со сглаживанием.
     
  5. belovw

    belovw Well-Known Member

    Регистрация:
    22 апр 2009
    Сообщения:
    5.210
    Симпатии:
    3.422
    Род занятий:
    Звукорежиссура
    Адрес:
    RK Almaty
    Кривые Бизье не дадут точного результата. Может линейная интерполяция? Но это буде много точек
     
  6. Aleksandr Oleynik

    Aleksandr Oleynik Well-Known Member

    Регистрация:
    16 янв 2007
    Сообщения:
    16.902
    Симпатии:
    9.160
    Пол:
    Мужской
    Адрес:
    Киев
    Да в колличестве точек проблем особых не вижу, просто это громоздко с точки зрения интерфейса, а вот такая прям филлегранная точность она редко когда нужна.
    Тут больше проблем может возникнуть с выставлением точного значения точке, нужно чтоб можно было значением управлять грубо слайдером, а потом точно до вбивать числами.
    Забыл ещё об одном параметре написать - нужно так-же иметь изменение масштаба в плюс (думаю до 200%), потому как в Риперовском Модуляционном модуле только от 100% в минус.
     
  7. Aleksandr Oleynik

    Aleksandr Oleynik Well-Known Member

    Регистрация:
    16 янв 2007
    Сообщения:
    16.902
    Симпатии:
    9.160
    Пол:
    Мужской
    Адрес:
    Киев
    Есть ещё одна мысль, ну и вопрос соответственно -
    А нельзя ли как-то Parameter модуляцию превратить в Audio control signal и после соответствующей обработки - обратно?
    Тогда можно было-бы пользоваться для изменения и масштаба и кривой изменения параметров, как штатным алгоритмом Рипера Audio control signal, так и любыми плагинами умеющими работать с уровнем сигнала (те-же Wave Shaper-ы)?
    Т.е. иметь два JS плага - один Parametr превращает в Audio, а второй на оброт.
     
  8. belovw

    belovw Well-Known Member

    Регистрация:
    22 апр 2009
    Сообщения:
    5.210
    Симпатии:
    3.422
    Род занятий:
    Звукорежиссура
    Адрес:
    RK Almaty
    Кстати кривые Бизье можно задавать на этапе модуляции
     
  9. Aleksandr Oleynik

    Aleksandr Oleynik Well-Known Member

    Регистрация:
    16 янв 2007
    Сообщения:
    16.902
    Симпатии:
    9.160
    Пол:
    Мужской
    Адрес:
    Киев
    Это ты применительно к моему посту выше?
    Я попробовал сделать то, что написал - Parameter модуляцию превратил в Audio control signal и после соответствующей обработки - обратно, использовав для этого JS:tonegenerator.
    Плохо получается - в тракт модуляции вводим очень сложную формулу, по которой происходит прирост амплитуды аудио сигнала, да ещё и для Audio control signal нулевым значением входного сигнала является -60dB, а мин, значение слайдера JS:tonegenerator - -120dB.
    В общем геморой, если честно. Хотя конечно можно поставить тонгенератор, а после него регулятор, который будет управлять сигналом от -60 до 0dB. Проверил - такая конструкция работает чётко!
    НО! Работает она ОЧЕНЬ, ОЧЕНЬ вяло, с задержкой и не годится для каких либо РиалТайм процессов :(
     
  10. belovw

    belovw Well-Known Member

    Регистрация:
    22 апр 2009
    Сообщения:
    5.210
    Симпатии:
    3.422
    Род занятий:
    Звукорежиссура
    Адрес:
    RK Almaty
    Мне кажется затея с мелдовским анализатором не имеет смысла.
     
  11. Aleksandr Oleynik

    Aleksandr Oleynik Well-Known Member

    Регистрация:
    16 янв 2007
    Сообщения:
    16.902
    Симпатии:
    9.160
    Пол:
    Мужской
    Адрес:
    Киев
    А у меня нет такой идеи. Ты о чём?
     
  12. belovw

    belovw Well-Known Member

    Регистрация:
    22 апр 2009
    Сообщения:
    5.210
    Симпатии:
    3.422
    Род занятий:
    Звукорежиссура
    Адрес:
    RK Almaty
    Вплотную подошел к кубическим сплайнам. Застрял на вычислении коэфицентов. Есть ли автоматизированные способы вычисления определителя матрицы 4х4?
     
  13. Aleksandr Oleynik

    Aleksandr Oleynik Well-Known Member

    Регистрация:
    16 янв 2007
    Сообщения:
    16.902
    Симпатии:
    9.160
    Пол:
    Мужской
    Адрес:
    Киев
    В общем-то, всё что в настоящий момент нужно мне, я сделал в модулях Bidule.
    НО! Формулу такой вот кривой -

    [​IMG]

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

    belovw Well-Known Member

    Регистрация:
    22 апр 2009
    Сообщения:
    5.210
    Симпатии:
    3.422
    Род занятий:
    Звукорежиссура
    Адрес:
    RK Almaty
    Если удалить центральную точку, что получится?
     
  15. Aleksandr Oleynik

    Aleksandr Oleynik Well-Known Member

    Регистрация:
    16 янв 2007
    Сообщения:
    16.902
    Симпатии:
    9.160
    Пол:
    Мужской
    Адрес:
    Киев
    В этом конкретном интерфейсе - прямая с одной белой точко по центру.
    Чёрная точка с коромыслами - это точка возможного перелома, а белые - меняют в каких-то пределах кривизну и её направление.
    Но это в этом конкретном примере реализции так, вообще-т о там много Mode реализации кривых.
     
  16. V_ad_im

    V_ad_im Well-Known Member

    Регистрация:
    31 окт 2006
    Сообщения:
    1.574
    Симпатии:
    770
    Пол:
    Мужской
    А чем в итоге дело закончилось со сглаживанием?
    Я делал сглаживания средствами Plogue Bidule, но не удовлетворён скоростью выполнения, озадачился сделать модуль на C++. Но перед этим смотрю варианты, вдруг можно обойтись меньшей кровью с помощью миди плагинов/скриптов для рипера?

    Для C++ мне советовали подключить уже готовые библиотеки
    мне вот эта понравилась кривая (см. картинку)
     

    Вложения:

  17. EUGEN27771

    EUGEN27771 Well-Known Member

    Регистрация:
    23 апр 2010
    Сообщения:
    2.321
    Симпатии:
    1.963
    Пол:
    Мужской
    Кусок библиотеки на EEL, вдруг чем-то поможет.
    PHP:
    desc:a handful of interpolation algorithms

    /*

        Interpolation Algorithms Library
            v 1.1


    For fractional delays, interpolation, etc. The bundled plugin lets you hear the
    difference between them when applied to a Karplus-Strong "pluck".


    These functions are standardized to assume that we are interpolating between
    x1 and x2, and mu is the decimal point in between. For example, using linear
    interpolation - if x1 = 1, x2 = 2, and mu = 0.5, then the interpolated value
    would be 1.5.


    xo .......... x1 ....[interpolating here]...... x2 .......... x3


    Here are a list of the different functions as well as brief notes.


        Non-Recursive


      interpolate_linear(x1,x2,mu)


    The "straight line" approximation. Most common, easiest to compute.


      interpolate_cosine(x1,x2,mu)
      interpolate_smooth(x1,x2,mu)


    These use curves (cosine and polynomial, respectively) instead of straight
    lines. The endpoints are still discontinuous, but the curves add some
    nonlinearity and color. "Smooth" is a polynomial alternative to "Cosine".


      interpolate_hermite(x0,x1,x2,x3,mu)


    4-point algorithm using Hermite spline. Computationally expensive, but I
    really like how it sounds.



        IIR



      interpolate_allpass_init(mu)
      interpolate_allpass(in)


    First order Thiran all-pass filter. When they talk about an allpass filter
    used in the delay line, this is the one they're talking about. The init
    function needs to be called first. This is a recursive algorithm.


      interpolate_allpass2_init(mu)
      interpolate_allpass2(in)


    Second order Thiran all-pass filter. Also a recursive algorithm.
    *** Special note - this must have a delay greater than 1. ***
    If you check the example file I bundled with this library, I pull four consecutive
    values (x0 through x3) from the delay line and interpolate between x1 and x2. To
    make this function work correctly, simply interpolate from x0 and add one to your
    fractional delay value (mu).


      interpolate_rbj_ap_init(mu)
      interpolate_rbj_ap(in)


    RBJ 2nd order all-pass IIR filter.



        FIR



      interpolate_fir_init(mu)
      interpolate_fir(in)


    3-tap fractional delay filter. I don't have a proper name for it, so I'm
    just calling it a generic FIR filter. See below for the site that I got it
    from if you care.


      interpolate_lagrange2_init(mu)
      interpolate_lagrange2(in)


    2nd order FIR Lagrange interpolation.


      interpolate_lagrange3_init(mu)
      interpolate_lagrange3(in)


    3rd order FIR Lagrange interpolation. This is another funny one - the delay needs
    to be greater than 1. Again, as with the 2nd order Thiran all-pass, take one
    sample sooner and add one to the fractional delay value ("mu").



    And that's that. There's more that I wanted to do, but either had trouble deriving them,
    finding code examples, or had problems implementing them. If I figure any others out,
    I'll be updating this file at the Reaper stash.

    Any questions, comments, code corrections, or suggestions on how to implement other
    interpolation algorithms, reach me in the Reaper JS forum.


        http://forum.cockos.com/forumdisplay.php?f=3


        ~ Sault
          2-16-14

    */



    @init


    // from http://paulbourke.net/miscellaneous/interpolation/

    function interpolate_linear(x1,x2,mu)
    instance(out)
    (
      
    out x1*(1-mu) + x2*mu;
    );


    function 
    interpolate_cosine(x1,x2,mu)
    instance(mu2,out)
    (
      
    mu2 = (cos(mu $pi))/2;
      
    out x1*(1-mu2) + x2*mu2;
    );


    function 
    interpolate_smooth(x1,x2,mu)
    instance(out)
    (
      
    mu mu mu * (- (mu));
      
    out x1 + ((x2 x1) * mu);
    );


    // from www.xoxos.net/sem/dsp2public.pdf
    // xoxos' formula has tension and bias set to 0

    function interpolate_hermite(x0,x1,x2,x3,mu)
    instance(a,b,c,d,out)
    (
      
    = ((* (x1x2)) - x0 x3) * 0.5;
      
    x2 x2 x0 - (5*x1 x3) * 0.5;
      
    = (x2 x0) * 0.5;
      
    mu;
      
    out = ((a*d+b)*d+c)*d+x1;
    );


    // Thiran first-order all-pass


    function interpolate_allpass_init(d)
    instance(a,x1,y1)
    (
      
    = (1-d)/(1+d);
      
    min(max(a,0),1);
      
    x1 y1 0;
    );


    function 
    interpolate_allpass(in)
    instance(out,x1,y1,a)
    (
      
    out in x1 y1;
      
    x1 in;
      
    y1 out;
      
    out;
    );


    // Thiran second-order all-pass
    //
    // from "Alias-Free Virtual Analog Oscillators Using a Feedback Delay Loop"
    // http://dafx09.como.polimi.it/proceedings/papers/paper_72.pdf


    function interpolate_allpass2_init(d)
    (
      
    this.a1 = -(d-2)/(d+1);
      
    this.a2 = ((d-1)*(d-2))/((d+1)*(d+2));
      
    this.x1 this.x2 this.y1 this.y2 0;
    );


    function 
    interpolate_allpass2(in)
    instance(out,y1,y2,x1,x2,a1,a2)
    (
      
    out a2*in a1*x1 x2;
      
    out -= (a1*y1 a2*y2);
      
    y2 y1;
      
    y1 out;
      
    x2 x1;
      
    x1 in;
      
    out;
    );


    // from RBJ's Audio Cookbook


    function interpolate_rbj_ap_init(frac)
    instance(w0cosw0sinw0alphaa1)
    (
      
    w0 $pi frac/srate;
      
    cosw0 cos(w0);
      
    sinw0 sin(w0);
      
    alpha sinw0 2;    // setting Q to 1
      
    this.b01 alpha;
      
    this.b11 = -*cosw0;
      
    this.b21 alpha;
      
    this.a01 alpha;
      
    this.a11 = -cosw0;
      
    this.a21 alpha;
      
    this.b01 /= this.a01;
      
    this.b11 /= this.a01;
      
    this.b21 /= this.a01;
      
    this.a11 /= this.a01;
      
    this.a21 /= this.a01;
      
    this.x11 this.x21 0;
      
    this.y11 this.y21 0;
      
    this.oin this.in 0;
    );


    function 
    interpolate_rbj_ap(in)
    instance(oinout)
    (
      
    oin in;
      
    out this.b01 in this.b11 this.x11 this.b21 this.x21;
      
    out += -this.a11 this.y11 this.a21 this.y21;
      
    this.x21 this.x11;
      
    this.x11 this.oin;
      
    this.y21 this.y11;
      
    this.y11 out;
      
    out;
    );


    // from http://www.cs.nuim.ie/~matthewh/VST.html

    function interpolate_fir_init(frac)
    instance(b0,b1,b2,t,d,g,a)
    (
      
    frac;
      
    = (1-d)/(1+d);
      
    10^(-6/(srate*1)); // 1 = "tau"
      
    b0 0.5 t;
      
    b1 0.5 * (1);
      
    b2 0.5 g;
      
    t;
    );


    function 
    interpolate_fir(in)
      
    instance(out,x1,x2)
    (
      
    out this.b0 in x1;
      
    x1 this.b1 in x2 this.out;
      
    x2 this.b2 in;
      
    out;
    );


    // from http://www.acoustics.hut.fi/~vpv/publications/vesan_vaitos/ch3_pt2_lagrange.pdf

    // 2nd order Lagrange interpolation


    function interpolate_lagrange2_init(frac)
    instance(h0,h1,h2)
    (
      
    h0 0.5 * (frac-1) * (frac-2);
      
    h1 = -frac * (frac-2);
      
    h2 0.5 frac * (frac-1);
    );


    function 
    interpolate_lagrange2(in)
    instance(out,x1,x2)
    (
      
    out this.h0 in this.h1 x1 this.h2 x2;
      
    x2 x1;
      
    x1 in;
      
    out;
    );


    // 3rd order Lagrange interpolation


    function interpolate_lagrange3_init(frac)
    instance(h0,h1,h2,h3)
    (
      
    h0 = (frac-1) * (frac-2) * (frac-3)/-6;
      
    h1 0.5 frac * (frac-2) * (frac-3);
      
    h2 = -0.5 frac * (frac-1) * (frac-3);
      
    h3 = (frac * (frac-1) * (frac-2))/6;
    );


    function 
    interpolate_lagrange3(in)
    instance(out,x1,x2,x3)
    (
      
    out this.h0 in this.h1 x1 this.h2 x2 this.h3 x3;
      
    x3 x2;
      
    x2 x1;
      
    x1 in;
      
    out;
    );
    --- добавлено 9 окт 2018 ---
    ----------
    Пару ф-й использовал(отсюда или нет - точно не помню) - но совсем для других целей. Что запомнил - кривая может вылазить максимумами/минимумами за точки.
     
    Ivan_k26 и V_ad_im нравится это.

Поделиться этой страницей