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

Aleksandr Oleynik

Well-Known Member
16 Янв 2007
26.360
20.063
113
62
Киев
Вот какой вопрос возник -
Скрипт привязан к конкретному проекту с точки зрения нужных событий. Запускается вместе с проектом.
А как его отключать вместе с выходом из проекта (выбором нового)?
[DOUBLEPOST=1437584476,1437290604][/DOUBLEPOST]Для себя пока понял, что использовать скрипты можно только для функций управления.
Для РиалТайм действий, связанных с временем, например изменением какого-либо параметра за определённое время - сделать не реально.
Я не нашёл возможность использовать в качестве еденицы прироста сэмпл, как минимальную величину дискретизации.
Такие функции как Loop, Deffer - не имеют постоянной величины связанной со временем - при одной нагрузке вычислений Loop тот-же делает 145 циклов в секунду, при другой - 20.
С Deffer-ом та-же ситуация, только он грубее - 32 цикла в секунду без нагрузки.

У кого есть какие мнения или знания по этому поводу?
 

nounaim

Active Member
29 Авг 2010
274
52
28
Возможно ли как то запускать команды из media explorer секции через скрипт?
 

fruitcore

Active Member
14 Дек 2013
275
70
28
NN
А возможно ли скриптом реализовать такую последовательность действий:
1) скрипт находит плагин с определенным именем (допустим, Lepou LeCto) на всех (или только на выбранных) треках проекта; 2) меняет их определенный параметр на некое определенное значение (oversampling = x8)

Хочется одной кнопкой включать максимальный оверсэмплинг в плагинах перед рендерингом, а затем также одной кнопкой его отключать
 

fruitcore

Active Member
14 Дек 2013
275
70
28
NN
@Aleksandr Oleynik, я так понимаю, что-то на основе этого: http://rmmedia.ru/threads/110165/page-2#post-1881237 ?

Единственное, что будет проблематично - это если на канале несколько одинаковых fx (случай нечастый, но вполне вероятный). А то, что изменение должно быть одинаковым во всех инстанциях плагина, не упрощает решение этой проблемы?
 

EUGEN27771

Well-Known Member
23 Апр 2010
2.293
1.995
113
Возможно ли как то запускать команды из media explorer секции через скрипт?
Вряд ли,
section_id value for
main=0,
main(alt)=100,
midi editor=32060,
midi evlist=32061.
Для эксплорера пока отсутствует?
Но,кажется, я видел где-то упоминание об эксплорере в нововведениях,сейчас не найду,возможно уже добавили.Они почему-то не сразу обновляют документацию по API.
П.С,точно,проверил вручную для media explorer section_id = 32063
Команды запустить все равно не получается,можно только состояние toggle менять
 
Последнее редактирование:

Aleksandr Oleynik

Well-Known Member
16 Янв 2007
26.360
20.063
113
62
Киев
Да.
Единственное, что будет проблематично - это если на канале несколько одинаковых fx (случай нечастый, но вполне вероятный).
Если нужно менять параметр на всех без исключения плагах - это не проблема.
А то, что изменение должно быть одинаковым во всех инстанциях плагина, не упрощает решение этой проблемы?
Если нужно менять разные параметры на разных плагинах и/или на разную величину - то это делать в общем прийдётся совмем иначе.
 

fruitcore

Active Member
14 Дек 2013
275
70
28
NN
В общем запилил вот такое для оверсэмплинга в инстанциях LeCto.
Код:
#fx_name = "LeCto (LePou plugins)";//set FX Name(ignoring case),Don't use "VST:" in name!!!
Add = 0;//Set 0 or 1(If the FX is not in the chain,it will be inserted)
#fx_par_name = "Oversampling";//Param_Name(ignoring case)
val = 1;//Set param value

trackcount = CountTracks(0);
i = 0;
loop(trackcount,
      track_idx = GetTrack(0,i);
         
              (FX_index = TrackFX_GetByName(track_idx, #fx_name, Add);
               Par_Num = TrackFX_GetNumParams(track_idx,FX_index);
               loop( Par_Num,
                      TrackFX_GetParamName(track_idx, FX_index,Par_Num, #fx_curr_par_name);
                   
                      stricmp(#fx_curr_par_name,#fx_par_name) == 0 ?
                      TrackFX_SetParam(track_idx, FX_index, Par_Num, val);
                   
                     Par_Num -=1;    
                    );
               );
      i += 1;
      );
Но действительно, проблема, когда на треке две инстанции плагина - скрипт действует только на первую. Исправимо?
 

EUGEN27771

Well-Known Member
23 Апр 2010
2.293
1.995
113
Чтоб не переделывать,можно просто переименовать вторую инстанцию(например,в
LeCto (LePou plugins-2) и сделать два скрипта-для первой и второй.
Другой вариант-добавить полный перебор эффектов на совпадение имен
 

@Michael

Well-Known Member
14 Дек 2010
969
1.461
93
Орёл / Москва
В lua выглядело бы так:
Код:
plug_name = "LeCto"
param_name = "Oversampling"
set_value = 1

trackcount = reaper.CountTracks(0)
if trackcount ~= nil then
  for i = 1, trackcount do
    track = reaper.GetTrack(0,i-1)
    fx_count = reaper.TrackFX_GetCount(track)
    if fx_count ~= nil then
      for j = 1, fx_count do
        retval, fx_name = reaper.TrackFX_GetFXName(track, j-1, "")
        if string.find(fx_name, plug_name) ~= nil then
          par_count = reaper.TrackFX_GetNumParams(track, j-1);
          for k = 1, par_count do
            retval, par_name = reaper.TrackFX_GetParamName(track, j-1, k-1, "")
            if string.find(par_name, param_name) ~= nil then
              reaper.TrackFX_SetParam(track, j-1, k-1, set_value)
            end
          end
        end
      end
    end  
  end
end
 
  • Like
Реакции: EUGEN27771 и fruitcore

fruitcore

Active Member
14 Дек 2013
275
70
28
NN
Другой вариант-добавить полный перебор эффектов на совпадение имен
вот я об этом и подумал,как я понимаю, названия параметра как раз так перебираются. Только как это реализовать?
Нужно сравнивать "TrackFX_GetFXName" с "#fx_name" ?

@@Michael, спасибо;) перейти что-ль на пятерку окончательно в честь этого...)
 
Последнее редактирование:

nounaim

Active Member
29 Авг 2010
274
52
28
а в API случайно нет чегонибудь связаного с модуляцией параметров, типа GetTargetParametr from source?
 

BigBoy2016

New Member
6 Июл 2009
2
0
1
@drzhnn,

# Python 3.4.0
from reaper_python import *
import os
path, filename = os.path.split(RPR_EnumProjects(-1, '', 256)[2])
backupfolder = path + '\\Backup'
src = path + '\\*.rpp-bak'
dst = path + '\\Backup'
backupcmd = 'move' + ' ' + src + ' ' + dst
if not os.path.exists(backupfolder):
os.makedirs(backupfolder)
os.system(backupcmd)
Замечательный скрипт, но как его научить работать с кириллицей ? и вообще возможно ли такое ?
 

BigBoy2016

New Member
6 Июл 2009
2
0
1
Если хотите работать с музыкальным софтом вообще и с Рипером в частности - забудьте о существовании кириллицы!!!! Уберите её от всюду!
Спасибо за совет , но это был просто вопрос, по поводу кириллицы. Иногда названия проэкта пишешь по русски ну а потом просто забываешь переименовать, вот и спросил )
 

Tito

Active Member
17 Янв 2005
236
60
28
56
Питер
Посетить сайт
Показывает FX с первого сенда трека под курсором в микшере.Для 2-3 и.т.д сенда редактируется одна цифра в скрипте,т.е отдельный скрипт,по другому пока не придумал :).

(*.EEL)
 

Вложения

  • Like
Реакции: sd и Nagor

Aleksandr Oleynik

Well-Known Member
16 Янв 2007
26.360
20.063
113
62
Киев
Уже как-то спрашивал, но пока так и не нашёл удобного решения -
Есть ли возможность написать скрипт, который бы последовательно задавал пользователю вопросы, заставлял заполнять данные, которые последовательно бы записывал в другой скрипт (имя которого пользователь также указывает), меняя его параметры?
Или такой вариант -
по типпу SWS снапшотов - выставил параметры на определённых плагинах, в определённых треках,
запустил скрипт, а он эти параметры занёс в указанный (при вопросе) второй скрипт.

В общем такое возможно?
 

Aleksandr Oleynik

Well-Known Member
16 Янв 2007
26.360
20.063
113
62
Киев
Попробую разобраться, Спасибо
[DOUBLEPOST=1442206962,1440485659][/DOUBLEPOST]Сын помог, всё получилось....
Единственное что, не могу найти как задать относительный путь создания файла, чтоб без указания абсолютного пути файл создавался не в корне папки с установленным Рипером, а в папку Скриптов....:(
 

Aleksandr Oleynik

Well-Known Member
16 Янв 2007
26.360
20.063
113
62
Киев
Точно! Попробую, спасибо
PS: Всё получилось!
Может ещё кому понадобится, код -

PHP:
GetUserInputs("Save config as", 1, "Filename", #filename);
GetExePath(#retval);
sprintf(#path, "%s\\Scripts", #retval);
sprintf(#fullpath, "%s\\%s.eel", #path, #filename);
f = fopen(#fullpath, "w");
Создаёт файл с заданным пользователем именем и расширением .eel в папке Scripts в директории где лежит EXE-шник Рипера.
 
Последнее редактирование:
  • Like
Реакции: lil-burn

Aleksandr Oleynik

Well-Known Member
16 Янв 2007
26.360
20.063
113
62
Киев
На сколько я понимаю - предлагается организовать Банк Скриптов, который будет включён в инсталяшку Reaper-а так-же, как сейчас включён какой-то базовый набор JS-ов.
 

@Michael

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

Как я представляю себе командную работу над дистрибутивом:
- любой человек копирует в свой гитхабовский акк дистрибутив целиком (fork), вносит в него правки (добавляет свои скрипты), далее делает из этого Pull Request (т.е. создаёт запрос на объединение изменённого им дистрибутива с имеющимся). Члены коллаборации решают принимать или нет эти объединения, и, если скрипт годный и относительно рабочий, он входит в полный дистрибутив.
 

nounaim

Active Member
29 Авг 2010
274
52
28
а как в lua скрипте убрать undo? в eel по моему нужно дописать:
Undo_OnStateChange("");
CSurf_FlushUndo(force);
в начале или конце скрипта
а как в lua это сделать?
 

nounaim

Active Member
29 Авг 2010
274
52
28
@Aleksandr Oleynik, да я в курсе про это, уже и на кокосе пошарился, как не пробовал в скрипт подставлять не работает в lua , да и в eel вроде не со всеми командами, пример примитивного скрипта мог бы помочь
 

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