JS Плагины - обсуждение

Не знаю , где спросить - пишу здесь. Можно ли сделать в Megababy sequencer так, чтобы паттерн начал играть от первого такта, независимо от того, какая цифра в параметре Sequence Length (16, 32, 27 и т.д.). Спасибо заранее.
 
Здравствуйте, у меня вот такая проблема, только начал, скажем так, по ютубу и научному тыку изучать reaper, понадобился VST trueverb stereo, пытался найти бесплатную вариацию ибо на сайте стоимость 1200-1500р., кроме вирусов увы ничего не поймал, если знаете подскажите пожалуйста источник .
 
@Serega D, ты конечно брат новенький и многое не знаешь. Стоит ознакомиться с правилами форума. Вырез и пиратский софт обсуждать запрещено. Также запрещено размещать и спрашивать ссылки на подобное.
По вашему запросу могу порекомендовать бесплатный
 
  • Like
Реакции: Ortseam
Парни, привет. ReaTune (Cockos) по умолчанию работает с auto scroll. Возможно ли его при необходимости отключать?
Заранее благодарю за ответ.

PS. Пост номер - 666 :eek:
 
Здравствуйте, помогите пожалуйста, как запомнить предыдущее значение переменной? Есть слайдер, отвечающий за смену канала, и нужно отправлять note off на предыдущий канал.
 
@AbramoV, На всякий случай оставлю здесь плагин который я переделывал под свои задачи, очень схожие с твоими. Может натолкнёт на мысль.

Код:
/**
 * JSFX Name: Note Off to Note On
 * Description: Filtr all note On and converts Notes Off to Note On.
 It's usefull to elaborate release fase in a sound.
 * Author: X-Raym. Modificated by Antonio from rmmedia.ru
 * Author URI: http://www.extremraym.com
 * Links:
     Forum Thread http://forum.cockos.com/showthread.php?t=181105
     Screenshot https://monosnap.com/file/jSODyOpFNH9W4VxgBW6dByhlGfnAKS.png
 * Donation: http://www.extremraym.com/en/donation
 * Licence: GPL v3
 * REAPER: 5.0
 * Extensions: None
 * Version: 1.0
 */

/**
 * Changelog:
 * Note Off to On v.1.0 by Antonio
 * v1.0 (2017-11-19)
  + Initial Release
 */

desc:Note On under 127 velocity to Note Off And all Note Off to Note On
in_pin:none
out_pin:none
slider1:0<0,16,1{Any,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16}>Input Channel


////////////////////////////////////////////////////////////////////////////////
@init
statNoteOn = $x90;
statNoteOff = $x80;


////////////////////////////////////////////////////////////////////////////////
@slider
inChannel = slider1 - 1;

////////////////////////////////////////////////////////////////////////////////
@block

while
(

  midirecv(offset,msg1,note,vel) ?
  (

    // Extract message type and channel
    status = msg1 & $xF0;
    channel = msg1 & $x0F;

    // Is it on our channel?
    channel == inChannel || inChannel == -1 ?
    (
      
      // Is it a note event?
      status == statNoteOn ?
      (

          // If note is good
          vel <=127 ? (
              
              vel = 0;
              msg1 = statNoteOff;
        
          );

      );
      // Is it a note off event?
            status == statNoteOff ?
            (
                    msg1 = statNoteOn;
              
                );
      

    );
    
    midisend(offset,msg1,note,vel);
    
    1; // Force loop to continue until all messages have been processed

  );

);

И ссылка на документацию, на всякий случай.
 
  • Like
Реакции: AbramoV
@AbramoV, На всякий случай оставлю здесь плагин который я переделывал под свои задачи, очень схожие с твоими. Может натолкнёт на мысль.

Код:
/**
* JSFX Name: Note Off to Note On
* Description: Filtr all note On and converts Notes Off to Note On.
It's usefull to elaborate release fase in a sound.
* Author: X-Raym. Modificated by Antonio from rmmedia.ru
* Author URI: http://www.extremraym.com
* Links:
     Forum Thread http://forum.cockos.com/showthread.php?t=181105
     Screenshot https://monosnap.com/file/jSODyOpFNH9W4VxgBW6dByhlGfnAKS.png
* Donation: http://www.extremraym.com/en/donation
* Licence: GPL v3
* REAPER: 5.0
* Extensions: None
* Version: 1.0
*/

/**
* Changelog:
* Note Off to On v.1.0 by Antonio
* v1.0 (2017-11-19)
  + Initial Release
*/

desc:Note On under 127 velocity to Note Off And all Note Off to Note On
in_pin:none
out_pin:none
slider1:0<0,16,1{Any,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16}>Input Channel


////////////////////////////////////////////////////////////////////////////////
@init
statNoteOn = $x90;
statNoteOff = $x80;


////////////////////////////////////////////////////////////////////////////////
@slider
inChannel = slider1 - 1;

////////////////////////////////////////////////////////////////////////////////
@block

while
(

  midirecv(offset,msg1,note,vel) ?
  (

    // Extract message type and channel
    status = msg1 & $xF0;
    channel = msg1 & $x0F;

    // Is it on our channel?
    channel == inChannel || inChannel == -1 ?
    (
    
      // Is it a note event?
      status == statNoteOn ?
      (

          // If note is good
          vel <=127 ? (
            
              vel = 0;
              msg1 = statNoteOff;
      
          );

      );
      // Is it a note off event?
            status == statNoteOff ?
            (
                    msg1 = statNoteOn;
            
                );
    

    );
  
    midisend(offset,msg1,note,vel);
  
    1; // Force loop to continue until all messages have been processed

  );

);

И ссылка на документацию, на всякий случай.
Спасибо, в очередной раз! Буду использовать этот код, когда буду прописывать note off, а то у меня так и не получается корректно настроить msg на прием и вывод сообщений.
Но нужно все-таки понять как также кошерно переключать эти самые каналы. Так переключает midi клавиатура:
coolswitch.png
И как я понял, мне нужно использовать предыдущее значение канала, соответственно помнить предыдущую переменную, но как это сделать, мне непонятно...
А с плагином пока выходит так:
uglyswitch.png

В результате чего звук тупо западает на другом канале. Эх, мануальчик бы для совсем новичков. Кстати быстро вникнуть в базу помогла сл. статья: https://www.admiralbumblebee.com/music/2018/02/08/Write-a-Reaper-MIDI-JSFX-from-scratch.html
 
Последнее редактирование:
@AbramoV, Мне представляется такая логика. Плагин следит за номером канала (переменной присваевается номер текущего канала), как только приходит нота с другого канала, плагин посылает нот оф на текущий канал, присваивает переменной значение нового канала, и повторяет цикл. Т.е. код должен быть очень похожий на код моего плагина.
 
Последнее редактирование:
  • Like
Реакции: AbramoV
@AbramoV, как вариант, при отправке MIDI команды Note ON, дополнительно в индексную переменную CH(Note) прописать номер текущего канала. Далее, при отправке команды Note Off, использовать значение канала из переменной CH(Note).
Тогда независимо от номера канала, который мог измениться до команды Note Off, ноты будут закрываться на том канале на котором были до этого открыты.

ЗЫ: индексная переменная в данном случае - это массив, таблица. Порядковый номер которой - это номер ноты, а значение - номер канала нажатой ноты. Поэтому, если номер канала даже изменится, то команда отпустить ноту пройдет именно по тому каналу по которому она и была нажата. Значит ноту можно будет отпустить сильно позже после того как канал поменялся.
 
Последнее редактирование:
  • Like
Реакции: AbramoV
@AbramoV, как вариант, при отправке MIDI команды Note ON, дополнительно в индексную переменную CH(Note) прописать номер текущего канала. Далее, при отправке команды Note Off, использовать значение канала из переменной CH(Note).
Тогда независимо от номера канала, который мог измениться до команды Note Off, ноты будут закрываться на том канале на котором были до этого открыты.

ЗЫ: индексная переменная в данном случае - это массив, таблица. Порядковый номер которой - это номер ноты, а значение - номер канала нажатой ноты. Поэтому, если номер канала даже изменится, то команда отпустить ноту пройдет именно по тому каналу по которому она и была нажата. Значит ноту можно будет отпустить сильно позже после того как канал поменялся.
Может я задам глупый вопрос, но можно пожалуйста конкретный код(строчку) с индексной переменной? Так и не понял как ее сделать...
Пока выжал это:
while (
midirecv(ts, msg1, msg23) ? (
m = msg1&240;


m == NOTE_ON*16 ? (
msg1 = m+channel;
PREVch = msg1&15;
n = msg23&127;

);
m == NOTE_OFF*16 ? (
msg1 = m+PREVch;

);
midisend(ts, msg1, msg23);
);
);
Но, ноту не знаю как запомнить. Вероятно здесь мне и понадобится эта переменная. Объясните пожалуйста, если не сложно, как ее применить?

p.s. Долго пытался понять почему не принимает note off, и потом понял, что моя клавиатура выдает note on с velocity = 0. Помог скрипт от Aleksandr Oleynik
 
@AbramoV, распишите с комментариями пожалуйста, тогда я смогу вам помочь.
Но, ноту не знаю как запомнить. Вероятно здесь мне и понадобится эта переменная. Объясните пожалуйста, если не сложно, как ее применить?
Индексные переменные - это массив. Массив у плагина один. Поэтому если нужно организовать несколько массивов используется смещение. Стандартно индексаная переменная вылядит так
x(n)
CH(n)
A(n)
где x, CH, А - смещение
n - номер элемента маасива.

Для меня это было сложно поначалу осознать. Вам видимо тоже. Поэтому рассмотрим детальнее.
Массив состоит из 8 миллионов элементов. Массив один! Поэтому, что бы организовать типа несколько массивов, нужно использовать смещение.
Например:
первый массив стартует с 0 адреса и имеет 8 элементов
второй массив имеет 16 элементов
третий массив имеет всё остальное

тогда присвоим переменным x, CH, A следующие значения
x=0 - смещение для первого массива начинающегося с нулевого адреса
CH=8 - по количеству элементов первого массива
A=8+16=24 по сумме элементов предыдущих массивов

и так далее

теперь по говорим об обращению к элементам массивов. Что бы обратиться например к 3-ему элементу первого массива, а именно записать туда определенное значение например Value нужно сделать следующую запись

x(3) = Value;

тогда 3 -ий элемент первого массива примет значение переменной Value
и наоборот
Value = x(3);

обращение к элементу массива может предоставляться переменной, например n
x(n) = Value;
 
  • Like
Реакции: AbramoV
@AbramoV, Присмотритесь еще раз к коду, который я запостил выше. Там, по-моему, есть всё что вам нужно, с комментариями.
И это запоминание канала вообще не понимаю для чего в этом случае. Присваиваешь номер текущего канала переменной, при смене канала посылаешь нот оф, использую эту переменную и всё, цикл завершился.
p.s. Долго пытался понять почему не принимает note off, и потом понял, что моя клавиатура выдает note on с velocity = 0.

Вот это не понял, при чем тут клавиатура? Принимает же плагин, а не клавиатура?

И кстати, в коде выше, там есть пара строчее следящих за велосити. Т.е. можно поставить " если велосити выше 0, то такое значение переменной", но, опять же, не вижу в этом необходимости, т.к. нам важна только смена канала.
 
@Antonio, не-не, это прямо уже стандартный паттерн, вымучанный за долгие годы работы с многоканальными инструментами:

на каждый note_on заводится своя "канальная" переменная (лучше всего, как Володя написал — notes_ch[note_nr]). Иначе потом появляются глюки.
На самом деле, задача настолько элементарная, что даже расписывать неохота. Особенно неохота потому что в JS отладка занимает времени в 10 раз больше, чем алгоритм, это надо запускать, тетсить и смотреть...
 
  • Like
Реакции: Antonio
@AbramoV, надеюсь это то что нужно
CSS:
desc: Chanel Editor

//Belovw
//V1

slider1:1<1,16,1>Chanel

@init
CH=0;

@slider

Chanel=Slider1-1;

@block
  while (midirecv(offset,msg1,msg2,msg3))
  (
      msg1==$x90 && msg3!=0 ? (
        CH[msg2]=Chanel;
        midisend(offset,$x90+Chanel,msg2,msg3));
    
      msg1==$x80  ? (
        midisend(offset,$x80+CH[msg2],msg2,64));
    
      msg1==$x90 && msg3==0 ? (
        midisend(offset,$x90+CH[msg2],msg2,msg3)); 
  ) ;
 
Последнее редактирование:
Урааа, спасибо большое!!!!Обожаю всех и все на этом форуме. Спасибо за код, а то мой внутренний гуманитарий уже успел поплакать..
п.с. Лайкосик подъехал
 
Последнее редактирование:
@belovw, хаха. Щас, протестировать сначала надо.

Так задумка в том, чтобы плагином каналы переключать или с контроллера? Если плагином, то это наверно пресеты на каждый канал надо создавать и их на хоткеи назначать?
 
Так задумка в том, чтобы плагином каналы переключать или с контроллера?
Это вопрос не ко мне.
Есть слайдер, отвечающий за смену канала, и нужно отправлять note off на предыдущий канал.
Видимо плагином.

У меня код так построен, что реагирует только на миди посылы с первого канала.
Странная конечно реакция. Но вы тестируйте. Может чего натестируете ))
 
@belovw, хаха. Щас, протестировать сначала надо.

Так задумка в том, чтобы плагином каналы переключать или с контроллера? Если плагином, то это наверно пресеты на каждый канал надо создавать и их на хоткеи назначать?
Моя цель - переключение артикуляций с помощью миди каналов. Именно каналами, лично мне так очень удобно оказалось. Ноты с MIDI каналами можно фильтровать, выделять, менять на другой канал (артикуляцию) и делать что угодно с каждой артикуляцией. Вначале увидел sws map input экшн, но он не работает в режиме record. Reaticulate не может окрашивать ноты и присваивать им канал, об этом спрашивал на форуме vi control (note off у него, кстати, также работает как в этом коде). И наконец открыл для себя js плагин, и у него хотел сделать note off, но только не при смене канала, а когда будет нажата клавиша на следующем канале. Теперь я с комфортом могу их переключать в режиме записи. Кстати, нашел плагин, который переключает не только каналы, а вместе с ними и CC контроллеры. Теперь все выглядит еще интереснее:
Безымянный.png
Правда я так и не понял как рисовать, например, именно 2 канал (upd. - с помощью фильтра)
Попытаюсь как-нибудь туда внедрить note off код belovw'а. Отдельное спасибо Belovw, Antonio, Vitalker за помощь.
 
Последнее редактирование:
  • Like
Реакции: vitalker и Antonio
Привет всем! Нашёл когда-то на форуме плагин witti громкость в процентах (как в Sound Forge). Сделал в Рипере Parameter Modulation, который превратил её в компрессор, очень мягко подавляющий пики. Но к сожалению на большей части материала есть какое-то потрескивание на Gain Reduction. Знает ли кто нибудь, что это за потрескивание, и можно ли его как-то устранить. Если нужно, могу выслать плагин, хотя пробовал настроить параметер mod на других гэйн плагинах (к примеру Purest Gain), и потрескивание было таким же.
 
Насколько сложно в стандартном js delay изменить максимальное время задержки с 10 секунд до 20 и выше?
 
@Fedor_Bird, речь о ReaDelay? Он не JS. А если всё же JS, то кликаем Edit и вместо 4000 ставим 20000 или другое значение и сохраняем.
 

Сейчас просматривают