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

  • Автор темы Автор темы drzhnn
  • Дата начала Дата начала
На данный момент этот ресурс самый информативный, мне кажется.

Aleksandr Oleynik, как раз в бетах исправляют баги предыдущих релизов. Редко бывает, что появляются откровенно сырое что-либо. По крайней мере касаемо sws.
А что вы хотите от параметра на выделенном треке? Могу помочь))
 
Последнее редактирование:
На данный момент этот ресурс самый информативный, мне кажется.
Спасибо!
Это уже Очень Хорошо!

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

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

Вложения

  • 1.gif
    1.gif
    852,7 KB · Просмотры: 341
Афигеть!
Спасибо - вернусь с отпуска буду копать!
Я так понимаю, что так-же можно изменение каких либо параметров в Рипере отправлять и во вне по OSC или MIDI?
 
Последнее редактирование:
Ребята, помогите! Никак не могу подружить рипер и питон! Не хотят скрипты работать. Чего только не делал и как только не ставил всё это добро. Подскажите всё же рабочее решение.
 
вот:
 

Вложения

  • settingss.jpg
    settingss.jpg
    103,9 KB · Просмотры: 268
Последнее редактирование:
  • Like
Реакции: naash_g
Ребята, помогите! Никак не могу подружить рипер и питон! Не хотят скрипты работать. Чего только не делал и как только не ставил всё это добро. Подскажите всё же рабочее решение.
Тоже долго мучался, но всё-таки запустил я его. Делал так:
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
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
@naash_g, Не знаю, у меня всё закидывается нормально, но на днях проскальзывала такая проблема. Её решение я отложил на след. день т.к. было поздно, утром всё заработало, такая вот мистика)
 
  • Like
Реакции: naash_g
@Michael, спасибо большое!
Получается, что скрипты теперь поддерживают все выражения Cycle Action Editor? А Консоли только через Cycle Action Editor? Или вы предлагаете делать такой составной Кастом Экшин из Цикл Экшинов и Скриптов?

@EUGEN27771, @Michael, по поводу OSC я всё-же имел в виду прежде всего отправку Любых OSC команд при помощи именно скриптов. Ну чтоб итогом выполнения какого либо скрипта была отправка OSC сообщения во вне, как контроль выполнения, например.
Ну и во вторую очередь отправку текстовых сообщений любых форматов, а не только имён треков или плагинов. Например отправка сообщения о том, что был выполнен скрипт в результате которого рипер изменил тембр гитары (комплексное изменение параметров нескольких плагинов) - опять таки, для обратной связи.
 
Последнее редактирование:
@EUGEN27771, у меня почему то не работает пример с динамическим изменением параметров через экшены, скрипт выдает ошибки:(
 
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
@Michael, у меня есть созданный на Cycle Action сэтап и он меня почти на 100% устраивает по функционалу (последнюю проблему с обращением к треку с конкретным именем тоже нашёл как решать).
Но!!!!!!!! Я хочу сделать это удобным для всех, а править несколько ini файлов на много сложнее, чем текстовый скрипт.
 
Ну я вообще-то написал скрипт выше, который обращается к треку с конкретным именем))
Саму форму запроса имени трека и эффекта от пользователя можно дописать (GetUserInputs).
Просто в консоли это немного более детализировано. То есть там же мы можем указать, какими символами имя трека заканчивается, или начинается или содержит. А в EEL есть только функция match, сравнивающая первый параметр со вторым + можно дописать аргумент количества совпадений по символам.

Ну а в ini вроде написано
Do not tweak by hand! Use the Cycle Action editor instead
Меня такие надписи обычно пугают и останавливают править конфиги))
 
Последнее редактирование:
  • Like
Реакции: Aleksandr Oleynik
Ну я вообще-то написал скрипт выше, который обращается к треку с конкретным именем))
Саму форму запроса имени трека и эффекта от пользователя можно дописать (GetUserInputs).
Был бы вам очень признателен, если бы вы сделали какой-то полностью законченный рабочий скрипт, как пример. А лучше парочку.
Я пока не совсем могу врубиться в это, а имея работающие примеры - мне на много проще двигаться дхальше.
Просто в консоли это немного более детализировано. То есть там же мы можем указать, какими символами имя трека заканчивается, или начинается или содержит. А в EEL есть только функция match, сравнивающая первый параметр со вторым + можно дописать аргумент количества совпадений по символам.
Да! Но в общем-то match как раз более правильно и надёжно, так как не позволит допустить ошибки и крутануть параметр не на том треке и не в том плагине.
Я общался на форуме кокоса с SWS о том, что было бы хорошо не только через консоль дать доступ к трекам и FX по их имени, а не по номеру - они написали, что имя не есть уникальным и его использовать плохо - от части они правы, но во многих задачах номер трека и FX тоже ни как не применимы - ну перенёс ты трэк в другое место, а плагины на нём поменял местами - и всё!, капец твоему Action-у.
Им бы ввести ID трека и ID FX-а (уникальные), которые бы присваивались один раз и на всегда в проекте - вот тогда всё было бы как нужно.

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

Меня такие надписи обычно пугают и останавливают править конфиги))
Это да, но я с этим всем разобрался хорошо и знаю что и как править, чтоб проблем не было.
 
Немного потерялся с конвертированием разных видов данных, но ребята с форума 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 - может напишут чего
 
Последнее редактирование:
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

В чём может быть проблема - ума не приложу... :(
 
Это API функции (не экшны). Или вы написали с ними скрипт и он не заработал?
Show VSTi under mouse cursor
Да, это мой скрипт. Проблема была как раз в связке BR_GetMouseCursorContext, BR_GetMouseCursorContext_Track. Но она решилась на то время бетой 2.6.3. А сейчас у вас 2.7 и не работает? Если так, то что-то странное)) Проверьте ещё раз, что действительно установлена 2.7.0
 
  • Like
Реакции: sve
@Michael,
Reaper about.jpg SWS about.jpg
BR_GetMouseCursorContext и BR_GetMouseCursorContext_Track вообще не находятся в Action List.
Я даже подумал, что эти фичи почему-то исключили из релиза SWS 2.7.0... Если это так - тогда печалька.
 
Ещё раз, это НЕ экшны, они НЕ должны находиться в экшн листе. Это функции Reaper API, для работы скриптов вобщем ;)

Только что установил 5pre29/2.7.0 - скрипт работает. Попробуйте установить в чистое место одно и другое.
 
Последнее редактирование:
Ок, сорри за нубство)))
Тем не менее, ваш скрипт не работает, выдаёт ошибку (картинка с ошибкой в посте #58).
@@Michael, есть идеи, почему так?
 
У меня была такая ошибка до 2.6.2. Breeder (один из ребят из sws, собственно эти функции, как и относящиеся к ним contextual toolbars, его) сам мне помог с этим скриптом и исправил в следущем бета релизе.
Вот сейчас импортировал в чистую 5pre29/sws2.7.0 свой конфиг, скрипт по прежнему работает. Пробовали с нуля поставить 5pre29/sws2.7.0 и попробовать на чистом конфиге? Не могу точно сказать, возможно что-то с файлом конфига sws.
 
Попробуйте установить в чистое место одно и другое.
Попробовал, в чистое место, и то, и другое. Скрипт НЕ работает, выдаёт ту же ошибку.
Возможно, что это "остатки сладки" из SWS 2.6.3 beta? Которых в 2.7.0 почему-то нет, но у вас они остались, поскольку ранее была установлена 2.6.3 beta?
Если не сложно, прикрепите пожалуйста архивчик с этой беткой (если он у вас остался). Найти её в сети уже не могу...

З.Ы. Кстати, скрипт Show VSTi on selected track работает отлично, спасибо большое!
 
Ну вот и ответ.
На SWS 2.6.3 beta скрипт работает чудесно!
[DOUBLEPOST=1431108649,1431108643][/DOUBLEPOST]Накатил поверху 2.7.0 - всё, опять та же ошибка. Удивительно.
[DOUBLEPOST=1431108929][/DOUBLEPOST]Вернулся на 2.6.3, уж больно хороший ваш скрипт :)
@@Michael, может быть зададите вопрос этому товарищу из SWS, если вам не сложно? Хотя, вы говорите, у вас всё работает с 2.7.0...
 

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