Коллекция JS: MIDI Plugins

Aleksandr Oleynik

Well-Known Member
16 Янв 2007
26.360
19.918
113
62
Киев
Простой, но иногда такой нужный MIDI JS плагин.
Мне иногда нужно было фильтровать на треке конкретные сообщения - пользовался Bidule, теперь вот хочу повторить все блоки Bidule для MIDI в JS.

Первый - MIDI Message Filter
Думаю, что он делает и так ясно -

MIDI%20Message%20Filter2.png




[DOUBLEPOST=1424728054][/DOUBLEPOST]

_____________________________________________________________________


Продолжу.
Добавил функциональности к MIDI Message Filter -
теперь можно каждый из типов контролеров не только пропускать или нет, а и в случаи если пропускать - менять ему MIDI канал, по которому он дальше проходит (для SySex понятно, что смена канала не имеет смысла).
Также плагин учитывает тот факт, что некоторые MIDI клавы вместо Note off выдают Note on с нулевой велосити -

MIDI%20Message%20Filter%20with%20Channel%20Change.png



[DOUBLEPOST=1424728543][/DOUBLEPOST]

_____________________________________________________________________


Также сделал себе в коллекцию простой плагин - который меняет MIDI канал для любых MIDI сообщений -

MIDI%20Change%20%20Channel.png


В общем-то полный аналог midiChannelize от pizMIDI.

[DOUBLEPOST=1425465784,1425112010][/DOUBLEPOST]

@tosh, обнаружил Баг в Рипере, касающийся интерпретации Рипером Note on with Velosity=0
Вообще то часть midi клавиатур не выдаёт сообщение Note off, вместо него у них Note on with Velosity=0 - и все как бы должны понимать, что фактически это Note off.
Рипер понимает, но почему-то ставит Velue не 0, а -1 - как следствие не адекватная работа с этими нотами в некоторых режимах.
Я конечно напишу об этом Кокосам, но пока сделал JS плагин, который для подобных клав нужно вещать в In FX и он превращает сообщение Note on with Velosity=0 в ПОЛНОЦЕННОЕ Note off -
(Note on with Velosity 0 to Note off).
 

Вложения

@Aleksandr Oleynik, многие плагины уже есть,сделанные другими авторами,еще не все выкладывают в stash(http://stash.reaper.fm/tag/JS-Effects).На форуме кокосов можно поиском найти.Многие,наверное,забывают и они так и теряются.
Вот фильтр,типа Вашего
 

Вложения

Да, я понимаю....
На сегодня преследую две цели - научиться JS, и сделать коллекцию нужных именно мне и обращавшимся ко мне.
Ну вот скажем в MIDI_MB Event Filter2.0 нельзя поменять канал для каждого типпа миди сообщения отдельно, а в моём можно.
 
А эти плагины могут оперировать значением доли, на которой стоит воспроизводимая нота (ну, или курсор воспроизведения)?
Давно хотел такую простенькую утилиту, которая бы для нот близ сильных долей делала бы большее велосити. И чтоб это все настраивалось хоть как-то слайдерами.
А то приходится пока что выкручиваться с groove tools, но это не так быстро, не так наглядно
 
@Aleksandr Oleynik, я понял,это на случай если что-то подсмотреть,переделать.
Вот,@fruitcore,спрашивает,и я помню,что точно где-то подобный плагин видел,может даже в стандартных.
Не знаю, думаю нет.
Могут,в Рипере есть сис. переменная beat position.Нужно сделать,чтобы,например,при заданных значениях этой переменной velocity была больше,а в остальных случаях меньше на определенныую величину.
 

Вложения

  • Снимок.PNG
    Снимок.PNG
    4,7 KB · Просмотры: 224
  • Like
Реакции: fruitcore
@Aleksandr Oleynik, я понял,это на случай если что-то подсмотреть,переделать.
Да, спасибо! Мы же так и учимся в общем-то :)
И, кстати, действительно - Форум Кокосовский за 2008-2010 год стоит по JS прошерстить как следует - там видимо пик был интереса к JS - и находятся ТАКИЕ крутые идеи и решения.....
Я вот свой плагин Parametr Curve Modulation переделать смогу с визуализацией....
PS: Уже переделал. :)

Вот,@fruitcore,спрашивает,и я помню,что точно где-то подобный плагин видел,может даже в стандартных.
Могут,в Рипере есть сис. переменная beat position.Нужно сделать,чтобы,например,при заданных значениях этой переменной velocity была больше,а в остальных случаях меньше на определенныую величину.
Точно, сейчас посмотрел JSFX документацию.
Только, если честно, я именно c midi item-ами мало дел имею и не сильно понял о чём в общем речь идёт.
Было-бы здорово пару midi файлов получить - один тот, который хотелось бы поправить, а второй исправленный - чтоб понять суть взаимосвязи которую нужно описать в коде.
 
Последнее редактирование:
@Aleksandr Oleynik, Например вот, в исходном файле все велосити 100, в итоговом повышены велосити каждой четверти (здесь можно, чтоб была настройка, какая минимально повышаемая доля: в данном случае 1/4, остальные все наоборот ослаблены). Причем вторая доля еще сильнее выделена, а первая самая сильная. В идеале были бы раздельные слайдеры на каждый уровень: на 1/1, на 1/2, на 1/4 и на все остальное. Можно сразу сделать слайдеры и на 1/8, и на 1/16. Мельче наверное уже бессмысленно

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

Вложения

Вот хороший плагин,все настраивается и интерфейс есть,и 16 паттернов http://forum.cockos.com/showthread.php?t=25391

Кстати,там еще упоминается seqbaby,который в настоящий момент уже megababy,включен в стандартные плагины Рипера,оч. клевая штука.

А вот еще круче,
Снимок.PNG
 
Последнее редактирование:
  • Like
Реакции: Aleksandr Oleynik
Я попробовал оба плагина - честно говоря вообще не понимаю что они делают... :( И как их настроить, чтобы сильные доли были с велосити 127, а слабые падали по велосити в соответствии с "удаленностью" от сильной.
 
Привет всем. Прошу помощи у тех кто разобрался с js плагинами. Нужен простой плагин, который при получении note off выдаёт note on c velocity например 100. Хочу использовать его для саунддизайна, для более тонкой работы с финальной частью звука, после отпускания клавиши. В FX стоит синтезатор, работает как обычно, после него искомый плагин и после любой сэмплер или синтезатор, доигрывающий ноту. Поиски не дали ничего, несколько часов проковырялся с плагином JS midi note repeater, который выдаёт ноты через заданные промежутки времени, пока клавиша нажата. Почитал документацию к JS. Пока далёк от реализации. Максимум, что получил, тупо меняя местами части кода в JS midi note repeater, это постоянный note on на выходе.

Вот код репитера, то что мне нужно, должно поместиться в 10 строк, если не ошибаюсь. Направьте, пожалуйста, если не займёт много времени.

Код:
desc:MIDI Note Repeater
//tags: MIDI processing

slider1:1<0.1,4>Size (beats)

in_pin:none
out_pin:none

@init
status=0;
status2=128;
memset(status,-1,128);
memset(status2,0,128);

@slider
div=slider1;

@block

while (
midirecv(ts,msg1,msg23) ?
(
  m=msg1&240;
  note=msg23&127;
  (m == 9*16 && msg23>=256) ? (
    status[note]=0;
    vel=(msg23/256);
    vel<1?vel=1:vel>=127?vel=127:vel|=0;
    status2[note]=vel;
    midisend(ts,9*16,note+vel*256); // send note on
  ) : (m == 8*16 || m == 9*16) ? (
    status[note]=-1;
    status2[note]>0.0 ? (
      midisend(ts,8*16,note); // send note off
      status2[note]=0;
    );
  ) : (
    midisend(ts,msg1,msg23);
  );
  bla=1;
);
);

inc = samplesblock/srate*(tempo/60)*2/div;
x=0;
loop(128,
  status[x]>=0.0 ?
  (
    status[x] += inc;
    status[x] >= 1.0 ?
    (
      status[x] -= 1.0;
      status2[x]>0.0 ? midisend(0,8*16,x) : midisend(0,9*16,x - status2[x]*256);
      status2[x]*=-1;
    );
  );
  x+=1;
 
);


@sample
 
@Antonio, может поможет плагин для обратного назначения?
Код:
/**
 * JSFX Name: Note On under X velocity to Note Off
 * Description: Converts Notes On to Note Off
 * Author: X-Raym
 * 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:
 * v1.0 (2017-11-19)
  + Initial Release
 */

desc:Note On under X velocity to Note Off

slider1:0<0,16,1{Any,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16}>Input Channel

slider3:0<0,127,1>Velocity Threshold

////////////////////////////////////////////////////////////////////////////////
@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 <= slider3 ? (
              
              vel = 0;
              msg1 = statNoteOff;
        
          );

      );

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

  );

);
 
  • Like
Реакции: Antonio
Получилось. Спасибо @vitalker.

Код:
/**
 * 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

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
Реакции: vitalker
Хаха, перешёл по ссылке в описании плагина и нашёл там
jSODyOpFNH9W4VxgBW6dByhlGfnAKS.png

В списке плагинов на фото увидел note off to note on. Загуглил название и нашел это:

Код:
desc:Note off to note on vel 1 filter

// these lines tell Reaper the effect has no audio input/output,
// which enables processing optimizations.
// MIDI-only FX should always have these lines.
in_pin:none
out_pin:none

@init

NOTE_OFF = $x80;
NOTE_ON = $x90;
VEL_ONE = $x100;

@block

  while
  (
    (midirecv(mpos, msg1, msg23)) ?
    (
      ((msg1 & $xF0) == NOTE_OFF) ?
      (
          chan = msg1 & $x0F;
          note = msg23 & $xFF;
        
          msg1 = NOTE_ON | chan;
          msg23 = VEL_ONE | note;
        
       );
    
      midisend(mpos, msg1, msg23);
      
    );
  );

Работает тоже отлично. Upd. Показалось, работает, но не так как мне нужно.
 
Последнее редактирование:
А ваш плагин работает?
Да, работает хорошо. Фильтрует все note on, а все note off меняет на note on. Не называю его своим, т. к измения были минимальными, 3 строчки убрал, 3 добавил. Спасибо ещё раз, без вашей помощи бы не справился.
 
  • Like
Реакции: vitalker

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