ReaScripts (скрипты для Reaper) - обсуждение (1 онлайн

@Michael

Well-Known Member
14 Дек 2010
969
1.461
93
Орёл / Москва
На данный момент этот ресурс самый информативный, мне кажется.

Aleksandr Oleynik, как раз в бетах исправляют баги предыдущих релизов. Редко бывает, что появляются откровенно сырое что-либо. По крайней мере касаемо sws.
А что вы хотите от параметра на выделенном треке? Могу помочь))
 
Последнее редактирование:

Aleksandr Oleynik

Well-Known Member
16 Янв 2007
26.360
20.063
113
62
Киев
На данный момент этот ресурс самый информативный, мне кажется.
Спасибо!
Это уже Очень Хорошо!

Aleksandr Oleynik, как раз в бетах исправляют баги предыдущих релизов. Редко бывает, что появляются откровенно сырое что-либо. По крайней мере касаемо sws.
У меня есть конкретный случай, когда это не так. Но некоторые мои задачи - мало кем востребованны - я писал SWS и они быстро правили.

А что вы хотите от параметра на выделенном треке? Могу помочь))
Для начала хотелось бы увидеть несколько рабочих скриптов, чтобы разобраться -
1. Например - изменение 2-го по счёту параметра плагина, стоящего вторым в инсёрте на выделенном треке
2. Тоже самое - на 2-ом по счёту треке
3. Тоже самое - на треке с именем Key001
4. Тоже самое, но обращение к плагину с конкретным именем на треке с конкретным именем.
 
Последнее редактирование:

EUGEN27771

Well-Known Member
23 Апр 2010
2.293
1.995
113
@Aleksandr Oleynik, Вы когда-то спрашивали о динамическом изменении параметров через экшны.Сегодня порылся-это таки возможно.Вот пример-
Код:
function run()
  is_new,name,sec,cmd,rel,res,val = reaper.get_action_context();
  if is_new then
    reaper.OscLocalMessageToHost("/track/1/volume",(val/127));--volume(track1)
    reaper.OscLocalMessageToHost("/track/1/send/1/pan",(val/127));--change send-pan(track1,send1)


end
  reaper.defer(run);
  end
   reaper.defer(run)
Назначив на скрипт крутилку или фейдер(или через MIDItoReaCP),так можно менять любой доступный параметр или сразу несколько параметров.
 

Вложения

  • 852,7 KB Просмотры: 300

Aleksandr Oleynik

Well-Known Member
16 Янв 2007
26.360
20.063
113
62
Киев
Афигеть!
Спасибо - вернусь с отпуска буду копать!
Я так понимаю, что так-же можно изменение каких либо параметров в Рипере отправлять и во вне по OSC или MIDI?
 
Последнее редактирование:

naash_g

Mixing...
5 Авг 2008
2.557
581
113
Che...
Ребята, помогите! Никак не могу подружить рипер и питон! Не хотят скрипты работать. Чего только не делал и как только не ставил всё это добро. Подскажите всё же рабочее решение.
 

LiSICin

Member
19 Июл 2014
62
14
8
Saratov
Ребята, помогите! Никак не могу подружить рипер и питон! Не хотят скрипты работать. Чего только не делал и как только не ставил всё это добро. Подскажите всё же рабочее решение.
Тоже долго мучался, но всё-таки запустил я его. Делал так:
1. Для Windows 7 x64 нужно качать инсталлер для 64 битной винды, от сюда: https://www.python.org/ftp/python/3.4.3/python-3.4.3.amd64.msi
2. Установить Phyton по этой инструкции: http://программисту.рф/python/ustanovka-python-na-windows-7/
3. Прописать следующие пути в настройках:
2015-05-03_172734.jpg

Вот BMP конвертер к примеру работает:
2.jpg
 
Последнее редактирование:
  • Like
Реакции: naash_g

@Michael

Well-Known Member
14 Дек 2010
969
1.461
93
Орёл / Москва
Aleksandr Oleynik,
изменение = ставим параметр в центр (0,5).
Нумерация индексов с нуля.

1. Например - изменение 2-го по счёту параметра плагина, стоящего вторым в инсёрте на выделенном треке
PHP:
track = GetSelectedTrack(0, 0);
TrackFX_SetParam(track, 1, 1, 0.5);
2. Тоже самое - на 2-ом по счёту треке
(по порядку)

PHP:
track = GetTrack(0, 1);
TrackFX_SetParam(track, 1, 1, 0.5);
2. Тоже самое - на 2-ом по счёту треке
(выделенному)

PHP:
track = GetSelectedTrack(0, 1);
TrackFX_SetParam(track, 1, 1, 0.5);
3. Тоже самое - на треке с именем Key001
Cycle Action Editor: Save selected tracks slot 1
Cycle Action Editor: Console S Key001
PHP:
track = GetSelectedTrack(0, 0);
TrackFX_SetParam(track, 1, 1, 0.5);
Cycle Action Editor: Restore selected tracks slot 1


4. Тоже самое, но обращение к плагину с конкретным именем на треке с конкретным

именем.
Cycle Action Editor: Save selected tracks slot 1
Cycle Action Editor: Console S Key001
PHP:
track = GetSelectedTrack(0, 0);
fx = TrackFX_GetByName(track, "fxname");
TrackFX_SetParam(track, fx, 1, 0.5);
Cycle Action Editor: Restore selected tracks slot 1

Если я правильно понял, Reaper и так отправляет OSC. У меня он связан с TouchOsc и прекрасно пересылает туда (на планшет) всё, что нужно: транспорт, фейдеры, выделенные треки, имена инсертов, посылов и т.д. Пошерстите файл OSC/Default.ReaperOSC
 
Последнее редактирование:
  • Like
Реакции: Aleksandr Oleynik

LiSICin

Member
19 Июл 2014
62
14
8
Saratov
@naash_g, Не знаю, у меня всё закидывается нормально, но на днях проскальзывала такая проблема. Её решение я отложил на след. день т.к. было поздно, утром всё заработало, такая вот мистика)
 
  • Like
Реакции: naash_g

Aleksandr Oleynik

Well-Known Member
16 Янв 2007
26.360
20.063
113
62
Киев
@Michael, спасибо большое!
Получается, что скрипты теперь поддерживают все выражения Cycle Action Editor? А Консоли только через Cycle Action Editor? Или вы предлагаете делать такой составной Кастом Экшин из Цикл Экшинов и Скриптов?

@EUGEN27771, @Michael, по поводу OSC я всё-же имел в виду прежде всего отправку Любых OSC команд при помощи именно скриптов. Ну чтоб итогом выполнения какого либо скрипта была отправка OSC сообщения во вне, как контроль выполнения, например.
Ну и во вторую очередь отправку текстовых сообщений любых форматов, а не только имён треков или плагинов. Например отправка сообщения о том, что был выполнен скрипт в результате которого рипер изменил тембр гитары (комплексное изменение параметров нескольких плагинов) - опять таки, для обратной связи.
 
Последнее редактирование:

nounaim

Active Member
29 Авг 2010
274
52
28
@EUGEN27771, у меня почему то не работает пример с динамическим изменением параметров через экшены, скрипт выдает ошибки:(
 

@Michael

Well-Known Member
14 Дек 2010
969
1.461
93
Орёл / Москва
Aleksandr Oleynik, нет, нет, я просто не искал, как это сделать в скрипте. Зачем, если уже всё придумали до нас)) Но вообще я полагаю, что касаемо проверки наименования треков стоит копать GetSetMediaTrackInfo_String(MediaTrack tr, "parmname", #stringNeedBig, bool setnewvalue), что-то в духе

PHP:
i = 0;
trackcount = CountTracks(0);
loop (trackcount,
   track = GetTrack(0, i);
   GetSetMediaTrackInfo_String(track, "P_NAME", #trackname, 0);
     match("key001",#trackname) ? (
     fx = TrackFX_GetByName(track, "SuperWave P8 (Christopher Gill)", 0);
     TrackFX_SetParam(track, fx, 1, 0.5);
     );
   i += 1;
);
key001 - трек
SuperWave P8 (Christopher Gill) - имя плагина
второй параметр этого плагина = 0,5

Но вообще cycle action, как и кастом и sws и всё, что находится в экшнах, можно вызвать скриптом через Main_OnCommand и NamedCommandLookup.

Что касается OSC. Так и не смог я из консоли или из скрипта послать месседж (голый string на указанный адрес) на внешнее устройство. Видимо, эти вещи были сделаны исключительно для того, чтобы имитировать сообщения с внешних устройств.
 
Последнее редактирование:
  • Like
Реакции: Aleksandr Oleynik

Aleksandr Oleynik

Well-Known Member
16 Янв 2007
26.360
20.063
113
62
Киев
@Michael, у меня есть созданный на Cycle Action сэтап и он меня почти на 100% устраивает по функционалу (последнюю проблему с обращением к треку с конкретным именем тоже нашёл как решать).
Но!!!!!!!! Я хочу сделать это удобным для всех, а править несколько ini файлов на много сложнее, чем текстовый скрипт.
 

@Michael

Well-Known Member
14 Дек 2010
969
1.461
93
Орёл / Москва
Ну я вообще-то написал скрипт выше, который обращается к треку с конкретным именем))
Саму форму запроса имени трека и эффекта от пользователя можно дописать (GetUserInputs).
Просто в консоли это немного более детализировано. То есть там же мы можем указать, какими символами имя трека заканчивается, или начинается или содержит. А в EEL есть только функция match, сравнивающая первый параметр со вторым + можно дописать аргумент количества совпадений по символам.

Ну а в ini вроде написано
Do not tweak by hand! Use the Cycle Action editor instead
Меня такие надписи обычно пугают и останавливают править конфиги))
 
Последнее редактирование:
  • Like
Реакции: Aleksandr Oleynik

Aleksandr Oleynik

Well-Known Member
16 Янв 2007
26.360
20.063
113
62
Киев
Ну я вообще-то написал скрипт выше, который обращается к треку с конкретным именем))
Саму форму запроса имени трека и эффекта от пользователя можно дописать (GetUserInputs).
Был бы вам очень признателен, если бы вы сделали какой-то полностью законченный рабочий скрипт, как пример. А лучше парочку.
Я пока не совсем могу врубиться в это, а имея работающие примеры - мне на много проще двигаться дхальше.
Просто в консоли это немного более детализировано. То есть там же мы можем указать, какими символами имя трека заканчивается, или начинается или содержит. А в EEL есть только функция match, сравнивающая первый параметр со вторым + можно дописать аргумент количества совпадений по символам.
Да! Но в общем-то match как раз более правильно и надёжно, так как не позволит допустить ошибки и крутануть параметр не на том треке и не в том плагине.
Я общался на форуме кокоса с SWS о том, что было бы хорошо не только через консоль дать доступ к трекам и FX по их имени, а не по номеру - они написали, что имя не есть уникальным и его использовать плохо - от части они правы, но во многих задачах номер трека и FX тоже ни как не применимы - ну перенёс ты трэк в другое место, а плагины на нём поменял местами - и всё!, капец твоему Action-у.
Им бы ввести ID трека и ID FX-а (уникальные), которые бы присваивались один раз и на всегда в проекте - вот тогда всё было бы как нужно.

Ну а в ini вроде написано

Меня такие надписи обычно пугают и останавливают править конфиги))
Это да, но я с этим всем разобрался хорошо и знаю что и как править, чтоб проблем не было.
 

@Michael

Well-Known Member
14 Дек 2010
969
1.461
93
Орёл / Москва
Немного потерялся с конвертированием разных видов данных, но ребята с форума cockos подсказали правильный синтаксис.
После "//" комментарии. Пишу не только для вас, так что разжевал сразу насколько возможно доступно ;)
Продублирую ещё раз эту ссылку. Ctrl+F или F3 по ней творит чудеса))

Итак,
PHP:
function set_parameter() // забиваем свою функцию
( // начинаем забивание
Undo_BeginBlock(); // для того, чтобы можно было отменить действие
GetUserInputs("input?", 4, "track name:, fx name:, parameter number:, value:", #inputdata); // ок, тут поинтереснее. Всё, что в кавычках, запоминается в один string параметр #inputdata через запятую, 4 - количество
match("%s,%s,%d,%f", #inputdata, #track_name, #fx_name, par_num0, value); // раскрываем всё, что было в #inputdata, и привязываем это дело к переменным, которые можно использовать в коде. Переменные соответственно #string, #string, integer, float point
par_num = par_num0 - 1; // отсчёт порядковых номеров эффектов в цепи начинается с нуля, так что мы вбиваем, например, единицу в поле ввода, а эта строка указывает, что нам нужно будет сделать всё на плагине с порядковым индексом 0
i = 0; // стартовый индекс трека для лупа, то есть мы начинаем долбление лупа с первого трека, индексы здесь аналогично начинаются с нуля
trackcount = CountTracks(0); // перебор треков, (ноль здесь и в подобных функциях говорит риперу, что выполнять функцию нужно в активном проекте)
loop(trackcount, // петля для каждого из треков, перечисленных предыдущей функцией, т.е. всех треков в проекте в данном случае (могло быть, скажем, CountSelectedTracks - соответственно был бы перебор выделенных треков)
  track = GetTrack(0, i); // берём трек с индексом i, в первый раз он равен нулю (i = 0) перед началом лупа), то есть первый трек в проекте (напомню, исчисление индексов треков с нуля начинается)
  GetSetMediaTrackInfo_String(track, "P_NAME", #cur_track, 0); // запоминаем имя трека в переменную #cur_track из его индекса (ранее указанная нами переменная track)
  match(#track_name, #cur_track) ? ( // соответствует ли имя трека забитому нами в поле ввода?
    fx = TrackFX_GetByName(track, #fx_name, 0); // ок, соответствует, значит достаём индекс нужного эффекта из переменной, которую мы забили в поле ввода
    TrackFX_SetParam(track, fx, par_num, value);//ну и применяем параметр в итоге, имея в арсенале все требуемые для этой функции переменные
    ); // это мы закончили вопрос "соответствует ли имя трека забитому нами?". Если бы не соответствовало, до этой строки всё бы игнорировалось
  i += 1; // в первый раз добавляем к нулю единицу. Теперь у нас i=1. Далее код перескакивает на строку, начинающуюся с loop.  Прогоняем луп заново уже для второго трека, добавляем ещё единицу, снова прогоняем и т.д.
); // луп пробегает через все треки, завершаем  его этой строкой
TrackList_AdjustWindows(0); // обновляет всё, что связано с TCP, на всякий случай
Undo_EndBlock("set parameter", 0); // говорит риперу, что вот он, конец куска кода, начавшегося с Undo_BeginBlock, который если что можно отменить
); // завершаем забивание функции

set_parameter(); // выполняем функцию, благо она у нас одна и без аргументов
UpdateArrange();// на всякий случай обновляет аранж
Им бы ввести ID трека и ID FX-а (уникальные)
Как раз недавно в свежей бетке sws (а вчера и в релизе) появились такие вещи:
  • Added functions to convert track/item/take from and to GUID:
    - BR_GetMediaItemByGUID
    - BR_GetMediaItemGUID
    - BR_GetMediaItemTakeGUID (function to get take from GUID already exists, see SNM_GetMediaItemTakeByGUID)
    - BR_GetMediaTrackByGUID
    - BR_GetMediaTrackGUID
И существующий TrackFX_GetFXGUID
Возможно, то, что вам нужно как раз)) Напомню, GUID = Globally Unique Identifier

По поводу OSC - может напишут чего
 
Последнее редактирование:

diggidon

Administrator
Команда форума
26 Май 2008
6.832
7.486
113
51
Днепр UA
BR_GetMediaItemByGUID
- BR_GetMediaItemGUID
- BR_GetMediaItemTakeGUID (function to get take from GUID already exists, see SNM_GetMediaItemTakeByGUID)
- BR_GetMediaTrackByGUID
- BR_GetMediaTrackGUID
Reaper v5.0pre29 x64, SWS 2.7.0 (вчерашние релизные) - нет у меня таких фич.
Видимо из-за этого не работает совершенно шикарный скрипт Show VSTi under mouse cursor отсюда (@@Michael, это ваш скрипт, насколько я понял).
При попытке выполнить скрипт появляется следующее окно:
ReaScript Error.jpg

В чём может быть проблема - ума не приложу... :(
 

@Michael

Well-Known Member
14 Дек 2010
969
1.461
93
Орёл / Москва
Это API функции (не экшны). Или вы написали с ними скрипт и он не заработал?
Show VSTi under mouse cursor
Да, это мой скрипт. Проблема была как раз в связке BR_GetMouseCursorContext, BR_GetMouseCursorContext_Track. Но она решилась на то время бетой 2.6.3. А сейчас у вас 2.7 и не работает? Если так, то что-то странное)) Проверьте ещё раз, что действительно установлена 2.7.0
 
  • Like
Реакции: sve

diggidon

Administrator
Команда форума
26 Май 2008
6.832
7.486
113
51
Днепр UA
@Michael,
Reaper about.jpg SWS about.jpg
BR_GetMouseCursorContext и BR_GetMouseCursorContext_Track вообще не находятся в Action List.
Я даже подумал, что эти фичи почему-то исключили из релиза SWS 2.7.0... Если это так - тогда печалька.
 

@Michael

Well-Known Member
14 Дек 2010
969
1.461
93
Орёл / Москва
Ещё раз, это НЕ экшны, они НЕ должны находиться в экшн листе. Это функции Reaper API, для работы скриптов вобщем ;)

Только что установил 5pre29/2.7.0 - скрипт работает. Попробуйте установить в чистое место одно и другое.
 
Последнее редактирование:

diggidon

Administrator
Команда форума
26 Май 2008
6.832
7.486
113
51
Днепр UA
Ок, сорри за нубство)))
Тем не менее, ваш скрипт не работает, выдаёт ошибку (картинка с ошибкой в посте #58).
@@Michael, есть идеи, почему так?
 

@Michael

Well-Known Member
14 Дек 2010
969
1.461
93
Орёл / Москва
У меня была такая ошибка до 2.6.2. Breeder (один из ребят из sws, собственно эти функции, как и относящиеся к ним contextual toolbars, его) сам мне помог с этим скриптом и исправил в следущем бета релизе.
Вот сейчас импортировал в чистую 5pre29/sws2.7.0 свой конфиг, скрипт по прежнему работает. Пробовали с нуля поставить 5pre29/sws2.7.0 и попробовать на чистом конфиге? Не могу точно сказать, возможно что-то с файлом конфига sws.
 

diggidon

Administrator
Команда форума
26 Май 2008
6.832
7.486
113
51
Днепр UA
Попробуйте установить в чистое место одно и другое.
Попробовал, в чистое место, и то, и другое. Скрипт НЕ работает, выдаёт ту же ошибку.
Возможно, что это "остатки сладки" из SWS 2.6.3 beta? Которых в 2.7.0 почему-то нет, но у вас они остались, поскольку ранее была установлена 2.6.3 beta?
Если не сложно, прикрепите пожалуйста архивчик с этой беткой (если он у вас остался). Найти её в сети уже не могу...

З.Ы. Кстати, скрипт Show VSTi on selected track работает отлично, спасибо большое!
 

diggidon

Administrator
Команда форума
26 Май 2008
6.832
7.486
113
51
Днепр UA
Ну вот и ответ.
На SWS 2.6.3 beta скрипт работает чудесно!
[DOUBLEPOST=1431108649,1431108643][/DOUBLEPOST]Накатил поверху 2.7.0 - всё, опять та же ошибка. Удивительно.
[DOUBLEPOST=1431108929][/DOUBLEPOST]Вернулся на 2.6.3, уж больно хороший ваш скрипт :)
@@Michael, может быть зададите вопрос этому товарищу из SWS, если вам не сложно? Хотя, вы говорите, у вас всё работает с 2.7.0...
 

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