Помогите создать экшн / кастом экшн / скрипт

  • Автор темы Автор темы @Michael
  • Дата начала Дата начала
Я точно в этом ничерта не шарю.... Смогу только продумать минималистический, но понятный всем GUI, правда в скрипте его написать - не смогу :(
Михаил, а plagin pin conector разве не часть кода Рипера?
 
Эмм, не очень понял. Могу сказать, что вся инфа о рутинге внутри fx chain находится в коде трека (который преимущественно читаем и редактируем людьми, описания параметров есть в cockos wiki), но закодирована пока не совсем очевидным мне образом.

<TRACK
NAME ""
PEAKCOL 16576
BEAT -1
AUTOMODE 0
VOLPAN 1 0 -1 -1 1
MUTESOLO 0 0 0
IPHASE 0
ISBUS 0 0
BUSCOMP 0 0
SHOWINMIX 1 0.6667 0.5 1 0.5 -1 -1 -1
FREEMODE 0
REC 0 0 0 0 0 0 0
VU 2
TRACKHEIGHT 0 0
INQ 0 0 0 0.5 100 0 0 100
NCHAN 4
FX 1
TRACKID {6024B293-42CA-4901-8070-3168D477BF6F}
PERF 0
MIDIOUT -1
MAINSEND 1 0
<FXCHAIN
WNDRECT 205 188 722 437
SHOW 0
LASTSEL 0
DOCKED 0
BYPASS 0 0 0
<VST "VST: ReaComp (Cockos)" reacomp.dll 0 "" 1919247213
bWNlcu9e7f4EAAAAEQAAAAAAAAAiAAAAAAAAAAQAAAAAAAAACAAAAAAAAAAQAAAAAQAAAAAAAAACAAAAAAAAAAQAAAAAAAAACAAAAAAAAAAQAAAAAAAAACAAAAAAAAAA
QAAAAAAAAACAAAAAAAAAAAABAAAAAAAAAAIAAAAAAAAABAAAAAAAAAAIAAAAAAAAABAAAAAAAAAAIAAAAAAAAABAAAAAAAAAAIAAAAAAAABUAAAAAAAAAAAAEADvvq3e
DfCt3gAAgD8AAAAAppvEOwrXozwAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAACc0QczAACAPwAAAADNzEw9AAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAA=
>
FLOATPOS 0 0 0 0
FXID {A9C66424-4574-4497-9B9C-58EBD1EC7202}
WAK 0
>
>
 
Я может упрощаю ситуацию, но для создания любого типпа и сложности роутинга нам по сути понадобится менять в любом VST плагине только то, что описывается в оболочке Рипера для каждого плага в пин коннекторе. Так ведь?
И именно эта информация не выведена как простая функция в api скрипта на уровне get-set?
 
Верно, надо либо отдельное API к этой штуке либо через три колена вытаскивать её из прослойки между рипером и fx плагином/инструментом.
 
Верно, надо либо отдельное API к этой штуке либо через три колена вытаскивать её из прослойки между рипером и fx плагином/инструментом.
Если сделать удобный GUI для внутритрекового роутинга, он 100% будет очень востребован.
 
lil-burn, сразу скажу, что риперовское API позволяет манипулировать только первым инструментом в треке.
https://raw.githubusercontent.com/M.../Track/mpl_Select_tracks_with_instruments.lua


1 Step Record . Нужен автономный степ рекорд миди , не заходя и не создавая миди айтем .
Иинтересно ты собрался писать миди без трека, айтема/тейка, инпутов, мониторинга, канала и т.д. Или это всё с потолка возьмётся?)
 
Последнее редактирование:
  • Like
Реакции: lil-burn
lil-burn, сразу скажу, что риперовское API позволяет манипулировать только первым инструментом в треке.
https://raw.githubusercontent.com/M.../Track/mpl_Select_tracks_with_instruments.lua
Иинтересно ты собрался писать миди без трека, айтема/тейка, инпутов, мониторинга, канала и т.д. Или это всё с потолка возьмётся?)

Все это есть , трек выделен (соответственно и мониторинг и проч на нем). Да без созданного айтема это верно . просто нажал хот кей (вызвал панель степ рекордера) и начал записывать ноты
Айтем создается автоматически при добавлении нот с степ рекордера
(спасибо что откликнулся)
 
@crutifixus, а простой вопрос - нафига без айтема?
ну можно и с айтемом , просто тогда нужно следить за его длинной . Не всегда можно проследить когда перестанешь играть . Здесь суть что бы не заходить в миди редактор , да и набирать получается гораздо быстрее .
 
@@Michael, :):):)!!!
ну 2 инструмента пока еще не было мысли в один трек загонять)
это, получается, пункт (2).
а что нужно поменять, чтобы выделялся только следующий от выделенного трека трек с инструментом?
и оч. интересует (3) - выделение инструмента на выделенном треке. Тогда тема инструментов для меня, напр, будет раскрыта.
К примеру, пользуюсь одним замечательным скриптом Select tracks with instruments.lua, но, напр, хотелось бы чтоб окно тоглилось. Имея же в арсенале (3), можно, уже не мучая никого, добавить к нему SWS: Toggle float selected fx for selected tracks - и все)
 
crutifixus, это вообще откуда? Logic? Гифку можешь сделать? Сорри за тупое сравнение, но пошагово я набивал только TB 303 - тут схема та же?

lil-burn, у тебя ещё много вопросов появится, уверен. Я не могу помогать тут всем, поэтому оставляю в приоритете только массовые и потенциально полезные реквесты (этой же политики придерживается основная движущая сила скриптописак). Так что лучше начни изучать ReaScript, это не так сложно, у тебя сразу отпадёт множество вопросов, а также структурируется "правильный" рабочий процесс, при котором ты будешь писать себе скрипт, если только чётко будешь осознавать, что он тебе не раз пригодится, а всё остальное делать руками, как все нормальные люди делали/делают.
 
Последнее редактирование:
@Michael, Эта фича Step Record из Digital Performer, а вообще-то, может не так и плохо, что люди тянут лучшие фичи из разных редакторов, ведь рипер от этого становится только мощнее. Нет под рукой DP, crutifixus думаю зальет гифку - на самом деле хорошая опция
 
  • Like
Реакции: crutifixus и Al Brazy
Как пример полезности, скажу, что теперь могу сделать на основе Вашего скрипта
Select_tracks_with_instruments.lua
такие вещи:
1. сделать фриз сразу всех инструментов в проекте
2. вкл./выкл. соло/мьют со всех треков с инструментами
3. увеличить/уменьшить громкость сразу всех треков с инструментами
4. измененить режимы автоматизации, рек-армов, режимы панорамы сразу всех треков с инструментами
5. быстро раскрасить все треки с инструментами
6. добавить все треки с инструментами в папку (можно добавить все треки с инструментами в одну папку, а без инструментов - в другую)
7. скопировать или переместить все треки с инструментами в другой проект (вкладку проекта)
8. переходить к 1-ому, 2-ому, 3-ему и тд. треку с инструментом в большом проекте

Как по мне, это уже очень круто.

На основе же скрипта "выделение инструмента на выделенном треке" можно легко составить, без знания скриптов, к примеру, такие кастомы:
1. закрыть окна всех открытых инструментов
2. закрыть все окна, кроме инструмента на данном треке
3. закрыть все окна и открыть каскадом все инструменты в проекте
4. включить/выключить байпас всех эффектов на треке, кроме инструмента
5. удалить все эффекты на треке, кроме инструмента

Скрипты потихоньку учусь писать, пока анализирую готовые. Заглядываю в ReaScript API (extremraym). Сейчас посмотрел и насколько понял, Ваш скрипт
// MPL Show VSTi on selected track
оч. похож на тот, который мне нужен, только надо поменять TrackFX_Show на что-то вроде TrackFX_Select, посмотрел API, но пока не нашел ничего подобного. Мне бы хотя бы знать, возможен ли такой скрипт или нет

И да, может быть на самом деле полезно проводить голосования для объективного понимания нужд людей. И, разумеется, откликаться сперва на наиболее востребованные.
 
lil-burn, ну вот, а мне ни одного из указанных кастомов не пригодилось бы и вряд ли пригодится. Другая иерархия и логика в проектах, другая система мышления, т.к. проекты мегаздоровые, короче, как у всех, всё индивидуально.

Ты правильно посмотрел. Идёшь сюда, жмёшь F3, вбиваешь 'TrackFX_Show' и видишь следующий набор бессмысленных символов:
C: void TrackFX_Show(MediaTrack* track, int index, int showFlag)
EEL: TrackFX_Show(MediaTrack track, int index, int showFlag)
Lua: reaper.TrackFX_Show(MediaTrack track, integer index, integer showFlag)
Python: RPR_TrackFX_Show(MediaTrack track, Int index, Int showFlag)
showflag=0 for hidechain, =1 for show chain(index valid), =2 for hide floating window(index valid), =3 for show floating window (index valid)
Также в моём скрипте ты уже увидел:
Код:
TrackFX_Show(track, fx_i, 3);
Соответственно меняешь тройку на единицу и будет тебе щястье.
В то же время, это неправильный скрипт (нет смысла перебирать эффекты, т.к. TrackFX_GetInstrument берёт только первый инструмент.
Я советую начать изучение всё-таки с LUA, для этого языка море ресурсов, в том числе и на русском языке. Для EEL ты не найдёшь ничего вообще))
Для наглядности я переписал всё это дело в LUA (как ты уже заметил, API не позволяет просто выделить FX, оно открывает морду плагина в чейне).
 
Последнее редактирование:
  • Like
Реакции: lil-burn
Вот записал еще раз про степ запись не внутри миди айтема кино digi 1 step.gif
Только что для себя нашел что кнопка степ работает в DP (велает пайзу по выбранномй длинне нот )

В чем + сы .
1 Как вы видите записать партию (если нужна квантизованная) очень просто и быстро ... Для любителей сибелиуса можно вообще длительности нот повесить на хот кеи 1 2 3 4 5 6 7 на нум лок клавиатуре . Таким образом набить партию можно очень быстро . Берем даже и оркестровые ыещи (партии) , например "пулемет " арпеджио . берем и набиваем восьмушками , поскольку библиотеки практически все играют криво (за счет не точного старта семплов) партия будет звучать нормально , даже отквантизованная таким образом )

2 Есть кнопка изменить duration - позволяет сделать выбранные ноты короче.
3 есть кнопки шаг вперед или шаг назад если что то пропустили (для шага назад нужно прилепить автоматическое стирание предыдущей ноты (или галочку, кто не хочет стирать)
4 Для любителей электронной музыки можно добавить в табличку значения громкости нот (лимит от и до) Евгений уже сделал такую табличку , но можно и совместить с этой ... Т,Е, Выбираем лимит 90 значит все ноты - велосити 90 . лимит от 60 до 127 , значит жтот промежуток .

Так же в видео работает скрипт велосити - смотч . Он позволяет делать быстро крещендо и диминуэндо. Но у нас есть тулза велосити тул от http://forum.cockos.com/showthread.php?t=136929&page=4)
но она пока не работает с внешними миди айтемами , только внутри партии . я написал на форуме , но пока молчит создатель .
В общем эти функции действительно здорово облегчают забивку нот .
Спаисбо
 
Из скрипта мы не можем получить midi прямым способом, так что тут лубо надо писать в айтем и затем проводить над ним какие-нибудь операции, либо в GUI скрипта сделать кнопки/клавиши для набивки или использовать обычную клавиатуру.
 
А команда типа создать пустой миди айтем , а затем идет нота , так нельзя ? длинна этого миди айтема равняется указанной длинне ноты

ну или самому создать миди айтем и писать в нем .... в миди редакторе есть такая удобная тулза ? Сейчас думаю не очень удобно реализованно
 
Последнее редактирование:
А команда типа создать пустой миди айтем , а затем идет нота , так нельзя
создать айтем любой длины с любыми нотами вообще не проблема,вопрос в том,что скрипт не может получить информацию с миди-входа,а ведь нужны именно ноты с миди--клавиатуры,как я понимаю.Было бы круто,если бы скрипт мог получать любые входные МИДИ-данные,пока можно получить только значение контроллера,привязанного к скрипту.

в миди редакторе есть такая удобная тулза ?
В миди редакторе есть степ-рекорд.Все остальное(то,что описано по пунктам) можно вынести в тулбар-настройки длины ноты,паузы и т.п. Без скриптов и даже без кастомов получится
 
  • Like
Реакции: lil-burn
Парни почему не выбирается миди вход?
 

Вложения

  • vsti.gif
    vsti.gif
    1,6 MB · Просмотры: 112
@@Michael,скажите, есть ли хоть какая-нибудь возможность прочитать данные(переменные из массива) JS-эффекта из скрипта?
Или информацию в непонятном(возможно бинарном?) виде из файла проекта?-выглядит так
Снимок.PNG
Сделал JS,который пишет и проигрывает все входящие МИДИ.
Но если бы удалось прочитать данные прямо из него с помощь скрипта,это был бы готовый "рестроспектив-рекорд".
 
создать айтем любой длины с любыми нотами вообще не проблема,вопрос в том,что скрипт не может получить информацию с миди-входа,а ведь нужны именно ноты с миди--клавиатуры,как я понимаю.Было бы круто,если бы скрипт мог получать любые входные МИДИ-данные,пока можно получить только значение контроллера,привязанного к скрипту.


В миди редакторе есть степ-рекорд.Все остальное(то,что описано по пунктам) можно вынести в тулбар-настройки длины ноты,паузы и т.п. Без скриптов и даже без кастомов получится

Как тогда они это в DP реализовали ? .... + этого метода в том , что ты можешь мгновенно переключиться на другую дорожку и начать "степить" там
Буду пробовать тогда во внутреннем миди редакторе настроить .....
 
Было бы круто,если бы скрипт мог получать любые входные МИДИ-данные,пока можно получить только значение контроллера,привязанного к скрипту
Ну я вот так и обхожу это дело - JS в котором параметры меняются от входных данных, а скрипт уже следит за изменением параметров
 
@Aleksandr Oleynik,
Как тогда они это в DP реализовали ? .... + этого метода в том , что ты можешь мгновенно переключиться на другую дорожку и начать "степить" там
@crutifixus, нет никаких проблем с реализацией для самих разработчиков.Но в скриптах предоставлены только отдельные определенные возможности,потому как открыты только некоторые "точки входа" в работу программы.
Описанные выше возможности не являются приоритетными,то есть они не интересуют большую часть аудитории программы(и,соответственно не приносят доход).Они реализуемы,но не являются необходимыми,по крайней мере, данный момент.
Представьте себе,что вот,у интересной Вам женщины все в порядке.Но бедра у соседки с первого этажа значительно лучше,а грудь у у соседки с третьего этажа куда как интереснее.Да и вообще,на пятом живет соседка,которая полностью устраивает,только немного тупит и тормозит,но то такое.
И как поступать теперь?
[DOUBLEPOST=1446997277,1446997182][/DOUBLEPOST]@Aleksandr Oleynik, мне нужно считать полностью МИДИ-партию,куча данных,так не получится
[DOUBLEPOST=1446997463][/DOUBLEPOST]
Код:
slider1:0<0,1,1{REC,PLAY Recorded}>Mode

in_pin:none
out_pin:none
@slider
(slider1 == 1 && play_state == 0 ) ? i = 0;output_msg_count=0;
(slider1 == 0 && play_state == 0 ) ? i = 0;output_msg_count=0;

@init
ext_noinit = 1;

//===RECORD INPUT MIDI===//
@block
sample_position = floor(srate*play_position + 0.5);

(play_state == 0 || sample_position<Last_Point || sample_position-Last_Point > 4*samplesblock)  ?
                                      (i = 0;output_msg_count=0;YYY=29;
                                       Start_Point = sample_position;);

block_position = sample_position - Start_Point;
slider1 == 0 && play_state == 1 ?
   (
    while (midirecv(offset,msg1,msg2,msg3) )   
             (i==0 ? input_msg_count=0;
              input_msg_count+=1;
              buf[i] = block_position;
              buf[i+1] = offset;
              buf[i+2] = msg1; 
              buf[i+3] = msg2;
              buf[i+4] = msg3;              
              i+=5;
              midisend(offset,msg1,msg2,msg3);//Pass true
              );
   );

Last_Point = sample_position;
//=========PLAY Recorded MIDI===================
@sample
slider1 == 1 && output_msg_count<input_msg_count && (play_state == 1 || play_state == 5) ?  
                  (
                   block_position  ==  buf[i] ?
                     ( midisend( buf[i+1],buf[i+2], buf[i+3],buf[i+4]);
                       output_msg_count+=1;
                       i+=5;
                      );                 
                  );   

//===INFO ONLY===//
  Y1 = buf[0];   Y2 = buf[1];   //Y3 = buf[3];
  Y4 = buf[10];  Y5 = buf[11];  //Y6 = buf[13];
  Y7 = buf[20];  Y8 = buf[21]; //Y9 = buf[23];
  Y10 = buf[30]; Y11 = buf[31]; //Y12 = buf[33];
Вот плагин,пишет и воспроизводит вcе входящее МИДИ.Нужно прочитать данные из buf[0....n];
 
Да разработчики могут вовсе и не знать об этом .... не все ж 100500 секвенсеров изучают . + в дефолтной установке видится что рип действительно был изначально заточен под аудио работу

так, начал создавать в миди ретакторе этот тул .
нашел только привязку ноты к сетке , соответственно и вывел 4-5 нотак . В низу привязку (notes) привязываем к сетке
В принципе работать можно .. единственное пока не нашел опцию Change Duration . есть ли она в Рипере ? Просто возмонжно по другому называется.
таки нашел ))) Shorten note one pixel ))
Теперь такой вопрос .. Эта кнопка ес-но срабатывает и делает нотку короче на пиксель , а можно ли какой то экшн написать что бы она делала короче пока не отпущу мышу ( нажал , держу , нотки становятся короче , отпустил - все )
 
Последнее редактирование:
@@Michael,скажите, есть ли хоть какая-нибудь возможность прочитать данные(переменные из массива) JS-эффекта из скрипта?
Или информацию в непонятном(возможно бинарном?) виде из файла проекта?-выглядит так
Посмотреть вложение 106651
Сделал JS,который пишет и проигрывает все входящие МИДИ.
Но если бы удалось прочитать данные прямо из него с помощь скрипта,это был бы готовый "рестроспектив-рекорд".

Возможность есть (это base64). Но это не данные из скрипта.
upd: возможно и данные, но читать это геморно
 
Последнее редактирование:
API не позволяет просто выделить FX, оно открывает морду плагина в чейне).

Ну это ничего, добавил Hide FX chain windows for selected tracks, и теперь просто выделяет эффекты. За исключением бриджуемых плагинов, их через экшены не закрыть (пока что). Но уже оч. хорошо)
 
@Aleksandr Oleynik, мне нужно считать полностью МИДИ-партию,куча данных,так не получится...
Вот плагин,пишет и воспроизводит вcе входящее МИДИ.Нужно прочитать данные из buf[0....n];
Женя, ты меня не понял.
Я понимаю, что этот вариант через задницу, но пока скрипт не умеет принимать и передавать миди, а JS умеет, при этом скрипт умеет считывать с JS и передавать в JS параметры, нужно не в JS buf[0.....n] писать входное миди сообщение, а через считывание в риал тайпе параметров JS-а писать их в скрипт. А потом точно также обратно.
Сколько данных в еденицу времени передаётся при записи стандартной миди партии?
Ну по максимуму?
Нота он, нота оф, велосити, СС и его val, PC и его val, афтертач, питч, и ещё пару контролеров.
Итого, всего максимум 10-14 параметров - т.е. 14-ю слайдерами в JS-е ты спокойно передаш в скрипт всю миди партию и точно так-же вернёшь её из скрипта обратно в JS.
 
Последнее редактирование:

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