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

J T

Member
17 Май 2011
143
23
18
37
RF
@@Michael, отлично, благодарю. А можно ли сделать так, чтобы рипит включался при сдвиге границ выделения? А то получается при выделении кнопка рипит не отжимается.
 

Aleksandr Oleynik

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

@Michael

Well-Known Member
14 Дек 2010
969
1.461
93
Орёл / Москва
Через переменные, которые запоминаются с помощью SetExtState. То есть сделать переменную условием выполнения какого-либо atexit в конкретном скрипте.
 
  • Like
Реакции: Aleksandr Oleynik

Aleksandr Oleynik

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

А не могли бы вы привести какой-то очень простой пример двух трёх скиптов, defer() которых гасился бы запуском следующего (из серии)?
Хреновая у меня усваяемость по теории...., только на практических примерах :(
 
Последнее редактирование:

@Michael

Well-Known Member
14 Дек 2010
969
1.461
93
Орёл / Москва
J T,
PHP:
function auto() local startOut1, endOut1
  startOut, endOut = reaper.GetSet_LoopTimeRange2(0, false, true, 0, 0, true)
  curr_timesel = endOut - startOut
  if curr_timesel ~= prev_timesel then
    if curr_timesel > 0 then
      reaper.GetSetRepeatEx(0,1)
    else
      reaper.GetSetRepeatEx(0,0)
    end
  end
  prev_timesel = curr_timesel
  reaper.defer(auto)
end

function main_loop()
  windowOut = reaper.BR_GetMouseCursorContext()
  if windowOut ~= "transport" then
    mode = 1
   else
    mode = 0
  end
  if mode == 1 then
    auto()
  end
  reaper.defer(main_loop)
end

main_loop()

Aleksandr Oleynik,

в скрипте на исполнение:
Код:
функция ()
(
переменная = getextstate;
переменная == 1 ?
defer("функция")
переменная == 0 ?
atexit("");
):
в управляющем скрипте:
Код:
переменная = 0; (отключит все defer, выполняемые в данный момент и зависимые от этой переменной)
setextstate(переменная);
 
Последнее редактирование:

Aleksandr Oleynik

Well-Known Member
16 Янв 2007
26.360
20.063
113
62
Киев
@@Michael, огромное спасибо - буду пробовать. А то реально тупик возник у меня с переключателями пресетов на скриптах, которые Пользователь может беспорядочно тыкать не дождавшись выполнения defer.

Вот только не очень понимаю как быть в ситуации, когда скрипт (в пачке скриптов) должен являться одновременно Управляющим для всех прочих и Исполняющим от всех прочих?
Придётся создавать список из переменных? По одной на каждый скрипт и писать в defer() секции скрипта весь список через &&?
 
Последнее редактирование:

J T

Member
17 Май 2011
143
23
18
37
RF
@@Michael, если вы про SWS, то он установлен (2.7.0), либо я чего-то недопонимаю. В Extension / Project StartUp Action поставил данный экшн. При перезапуске проекта вылазит отчет об ошибке скрипта. Не могу понять где я ошибся?
 

@Michael

Well-Known Member
14 Дек 2010
969
1.461
93
Орёл / Москва
Ни в чём. Это баг. Попробуйте установите (с этой бетой у меня работает):
Нужно сохранить проект после выбора этого скрипта в качестве стартового экшна. Валидным будет только этот проект (можно на его основе сделать шаблон, если вы всё время будете использовать этот скрипт).
 
Последнее редактирование:
  • Like
Реакции: Aleksandr Oleynik и J T

J T

Member
17 Май 2011
143
23
18
37
RF
@@Michael, с пре-релизом SWS 2.7.1 скрипт заработал, теперь всё работает и настроение поднимает. Очень благодарю. :)
 
  • Like
Реакции: Aleksandr Oleynik

Aleksandr Oleynik

Well-Known Member
16 Янв 2007
26.360
20.063
113
62
Киев
Коллеги, пытаюсь разобраться в использовании функции atexit - пока ни фига не выходит....

Если можно - на примере -
есть скрипт -
PHP:
    tr = GetTrack(0, 0);
   
     function wait_001()
    (        
    TrackFX_GetParamNormalized(tr, 0, 2) == 1 ?
     (
      TrackFX_SetParam(tr, 0, 1, 0);
      );
    TrackFX_GetParamNormalized(tr, 0, 0) == 1 ?
     (
      TrackFX_SetParam(tr, 0, 1, 100);
      );
    
    defer("wait_001()");
        
      );
    
          wait_001();
defer в нём бесконечный - т.е. скрипт запускается и всё время ждёт наступления двух событий.
Как в него вставить функцию atexit так, чтобы она останавливала работу скрипта по третьему событию? -
PHP:
TrackFX_GetParamNormalized(tr, 0, 4) == 1 ?
Так не работает -
PHP:
    tr = GetTrack(0, 0);
   
     function wait_001()
    (        
    TrackFX_GetParamNormalized(tr, 0, 2) == 1 ?
     (
      TrackFX_SetParam(tr, 0, 1, 0);
      );
    TrackFX_GetParamNormalized(tr, 0, 0) == 1 ?
     (
      TrackFX_SetParam(tr, 0, 1, 100);
      );
    
    defer("wait_001()");        
      );
    
          wait_001(); 
  
    TrackFX_GetParamNormalized(tr, 0, 4) == 1 ?  
        (
         atexit("");
         );
 

@Michael

Well-Known Member
14 Дек 2010
969
1.461
93
Орёл / Москва
Попробуйте так
PHP:
tr = GetTrack(0, 0);

function wait_001() (
  TrackFX_GetParamNormalized(tr, 0, 4) != 1 ? ( 
    TrackFX_GetParamNormalized(tr, 0, 2) == 1 ? (
      TrackFX_SetParam(tr, 0, 1, 0);
      );
    TrackFX_GetParamNormalized(tr, 0, 0) == 1 ? (
      TrackFX_SetParam(tr, 0, 1, 100);
      );
    ) : (
      atexit("");
  ); 
  defer("wait_001()");      
);
  
  
wait_001();
 
  • Like
Реакции: Aleksandr Oleynik

Aleksandr Oleynik

Well-Known Member
16 Янв 2007
26.360
20.063
113
62
Киев
Так работает. Понял. Спасибо!
defer останавливается ровно на период пока
PHP:
TrackFX_GetParamNormalized(tr, 0, 4) != 1
Скрипт при этом остаётся запущенным.
[DOUBLEPOST=1435673118,1435670318][/DOUBLEPOST]Михаил, я на форуме Кокосов видел пару скриптов (правда не EEL) в которых atexis использовался не только для закрытия текущего defer, но и запуска новой функции.... - что-то писали в скобках, в кавычках.
Не подскажете как это оформить правильно?
 

@Michael

Well-Known Member
14 Дек 2010
969
1.461
93
Орёл / Москва
Код:
atexit("
Main_OnCommand(action_id, 0);
UpdateArrange();"
);
или

Код:
atexit("start_new_function()") // при этом перед этим конечно нужно указать, что находится внутри start_new_function()
 
  • Like
Реакции: Aleksandr Oleynik

Aleksandr Oleynik

Well-Known Member
16 Янв 2007
26.360
20.063
113
62
Киев
Очень мощный функционал, ещё раз Спасибо!
[DOUBLEPOST=1435696222,1435684232][/DOUBLEPOST]Существует ли прямая возможность отправить MIDI (NOTE) OFF при помощи скрипта? Не через активацию Экшина.
[DOUBLEPOST=1436085247][/DOUBLEPOST]Коллеги,
ну ОООООЧЕНЬ НУЖНО иметь возможность ставить таймауты между выполняемыми в скрипте командами.
Не важно на сколько время выставленное в ожидании будет прям точно выполняться, нужно просто иметь возможность ставить задержку между последовательно выполняемыми командами.
 

LiSICin

Member
19 Июл 2014
62
14
8
Saratov
Ребят, подскажите как правильно установить сей чудный скрипт, ибо при нажатии на кнопку "Create" выскакивает такая ошибка:
Снимок экрана 2015-07-07 в 11.11.26.png
 

Mateush1982

Active Member
5 Авг 2009
433
197
43
42
Krasnoyarskiy kray

Mateush1982

Active Member
5 Авг 2009
433
197
43
42
Krasnoyarskiy kray
а прикольно было бы соединить данный скрипт со скриптом от EUGEN27771 "огибающая по шипящим"!!!! то есть первые шаги как есть фильтр ,Гейт и.т.д а на последнем этапе возможность строить плавную огибающую... Как Вам "идейка"- можно "Rea"-лизовать? :)
 

Mateush1982

Active Member
5 Авг 2009
433
197
43
42
Krasnoyarskiy kray
у меня mac!!! галки на beta и official release - затем check now! не показывает 2.7.1?
a Reaper 5.0rc4?
 
Последнее редактирование:

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