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

  • Автор темы Автор темы drzhnn
  • Дата начала Дата начала
@@Michael, отлично, благодарю. А можно ли сделать так, чтобы рипит включался при сдвиге границ выделения? А то получается при выделении кнопка рипит не отжимается.
 
Мой пост был не об этом, а о том, как выключить defer() одного скрипта из другого скрипта. defer() для каждого скрипта свой.
Михаил, и как, ответ нашёлся положительный?
Мне бы такая возможность также пригодилась!
 
Через переменные, которые запоминаются с помощью SetExtState. То есть сделать переменную условием выполнения какого-либо atexit в конкретном скрипте.
 
  • Like
Реакции: Aleksandr Oleynik
Эээээээ, я и atexit то пока не знаю как применить :(.....
Но то, что можно - это очень хорошо.
Если есть ряд кнопок привязанных к разным скриптам с разными defer(), то это чуть ли не единственный способ не устроить хаос из скриптов, если пользователь начнёт эти кнопки нажимать одну за другой не дождавшись выполнения defer() запущенного одним из скриптов.
Нужно как-то сбрасывать ожидание запрограмированного события, если пользователь передумал и запустил следом новый скрипт, предпологающий ожидание совсем другого события.

А не могли бы вы привести какой-то очень простой пример двух трёх скиптов, defer() которых гасился бы запуском следующего (из серии)?
Хреновая у меня усваяемость по теории...., только на практических примерах :(
 
Последнее редактирование:
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(переменная);
 
Последнее редактирование:
@@Michael, огромное спасибо - буду пробовать. А то реально тупик возник у меня с переключателями пресетов на скриптах, которые Пользователь может беспорядочно тыкать не дождавшись выполнения defer.

Вот только не очень понимаю как быть в ситуации, когда скрипт (в пачке скриптов) должен являться одновременно Управляющим для всех прочих и Исполняющим от всех прочих?
Придётся создавать список из переменных? По одной на каждый скрипт и писать в defer() секции скрипта весь список через &&?
 
Последнее редактирование:
@@Michael, если вы про SWS, то он установлен (2.7.0), либо я чего-то недопонимаю. В Extension / Project StartUp Action поставил данный экшн. При перезапуске проекта вылазит отчет об ошибке скрипта. Не могу понять где я ошибся?
 
Ни в чём. Это баг. Попробуйте установите (с этой бетой у меня работает):
Нужно сохранить проект после выбора этого скрипта в качестве стартового экшна. Валидным будет только этот проект (можно на его основе сделать шаблон, если вы всё время будете использовать этот скрипт).
 
Последнее редактирование:
  • Like
Реакции: Aleksandr Oleynik и J T
@@Michael, с пре-релизом SWS 2.7.1 скрипт заработал, теперь всё работает и настроение поднимает. Очень благодарю. :)
 
  • Like
Реакции: Aleksandr Oleynik
Коллеги, пытаюсь разобраться в использовании функции 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("");
         );
 
Попробуйте так
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
Так работает. Понял. Спасибо!
defer останавливается ровно на период пока
PHP:
TrackFX_GetParamNormalized(tr, 0, 4) != 1
Скрипт при этом остаётся запущенным.
[DOUBLEPOST=1435673118,1435670318][/DOUBLEPOST]Михаил, я на форуме Кокосов видел пару скриптов (правда не EEL) в которых atexis использовался не только для закрытия текущего defer, но и запуска новой функции.... - что-то писали в скобках, в кавычках.
Не подскажете как это оформить правильно?
 
Код:
atexit("
Main_OnCommand(action_id, 0);
UpdateArrange();"
);
или

Код:
atexit("start_new_function()") // при этом перед этим конечно нужно указать, что находится внутри start_new_function()
 
  • Like
Реакции: Aleksandr Oleynik
Очень мощный функционал, ещё раз Спасибо!
[DOUBLEPOST=1435696222,1435684232][/DOUBLEPOST]Существует ли прямая возможность отправить MIDI (NOTE) OFF при помощи скрипта? Не через активацию Экшина.
[DOUBLEPOST=1436085247][/DOUBLEPOST]Коллеги,
ну ОООООЧЕНЬ НУЖНО иметь возможность ставить таймауты между выполняемыми в скрипте командами.
Не важно на сколько время выставленное в ожидании будет прям точно выполняться, нужно просто иметь возможность ставить задержку между последовательно выполняемыми командами.
 
SPK77 допилил скрипт Manipulate take volume envelope: для меня вообще "бомба"!!! добавить бы поддержку стерео айтемов..... ммммм ;-)
http://forum.cockos.com/showpost.php?p=1539924&postcount=504
Manipulate take vol env3.gif
 
Ребят, подскажите как правильно установить сей чудный скрипт, ибо при нажатии на кнопку "Create" выскакивает такая ошибка:
Снимок экрана 2015-07-07 в 11.11.26.png
 
а прикольно было бы соединить данный скрипт со скриптом от EUGEN27771 "огибающая по шипящим"!!!! то есть первые шаги как есть фильтр ,Гейт и.т.д а на последнем этапе возможность строить плавную огибающую... Как Вам "идейка"- можно "Rea"-лизовать? :-)
 
у меня mac!!! галки на beta и official release - затем check now! не показывает 2.7.1?
a Reaper 5.0rc4?
 
Последнее редактирование:

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