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

Martin111

Member
18 Фев 2015
482
20
18
53
Мастера скриптов, помогите пожалуйста сделать волшебную кнопку, которая окрашивала бы регион в сохранённый цвет, (тоесть заранее выбрал цвет который нравится, например, регион становится желтым когда пишешь куплет, фиолетовым когда пишешь припев. Выбран таймселекшн, нажимаю на Markers: Insert regionfrom time selection , и он делает мигающий курсор, режим ожидании ввода названия, печатаю слово куплет, нажимаю enter и регион становится желтым.
 
  • Like
Реакции: nazarol-jk35

axis

Well-Known Member
18 Апр 2005
4.723
3.256
113
45
Kaniv, UA
@Martin111, все уже есть.

Shift+R - устанавливает регион из time selection'a

Shift+DblClick по региону - вызывает окно свойств региона с курсором в поле для ввода.

В AutoColor/Icon настраиваем цвета для регионов.

гиф >> https://yadi.sk/i/7tIY7TxBsrfYe
 

Aleksandr Oleynik

Well-Known Member
16 Янв 2007
26.360
20.063
113
62
Киев
Мне сегодня Сын сделал парсер на чанки, но спецефический.
У меня в одном и том-же проекте создаётся куча композиций, ну и сохраняются они частично через чанки трэков. Но по скольку в какой-то следующей композиции может оказаться так, что на трек нужно добавить плагин, а его не было в куче предидуших композициях, пришлось сделать механизм, который при появлении нового плага на трэке в чанки всех сохраненных ранее композиций его добовляет, но байпасным.
Иначе, при вызове композиции в которой плагина этого небыло, он просто исчезал.

PS: Вообще очень жаль, что в чанках нет возможности ставить игнорирование части меток, например игнорировать не описанные FX-ы. Ну или сенды трека, или другие его параметры.
 
Последнее редактирование:

EUGEN27771

Well-Known Member
23 Апр 2010
2.293
1.995
113
Наконец-то он начал как-то дышать.
Фильтр теперь хреначит как бульдозер 45 секунд стерео за 250мс при абсолютно любых настройках на моем старом компе. Теперь остальное вносит больше задержки, но уже довольно быстро и будет еще быстрее.
При всех косяках, и с учетом, что это только задумка пока, она из простых лупов основные инструменты(кик,снейр,хет) вытаскивает на ура.
Главное - это достаточно удобно(или я уже привык просто:)).
Ошибки, конечно, есть(велосити, позиции чуть гуляют). Надо все это хотя бы попытаться довести до ума. Гейт этот полностью перепиливать, он для диэссера был нормальный, но тут надо кое-что покруче и точнее, и с велосити сразу что-то решать. Но уже хоть как-то.
 

SKlogic

Well-Known Member
14 Май 2006
3.126
1.208
113
46
Moscow
sergeykuptsov.com
@Levanter, по поводу фриза вст
есть подозрение что у тебя отключена опции показывать все тейки и ты видишь только один аудио айтем.. midi айтем никуда не удаляется-он мьютится и остается в неактивном тейке
включи show all takes in lane
 

Aleksandr Oleynik

Well-Known Member
16 Янв 2007
26.360
20.063
113
62
Киев
Парни!!!!!
Читайте правила раздела!!!!!
Обсуждения все в другой теме - тут постят только те, кто пишет скрипты и без обсуждений!
 

Levanter

New Member
21 Окт 2008
4
1
3
@SKlogic, спасибо! Так и есть, после show all takes in lane все теки наместе. Еще один момент скрипт работает с VSTi. С AUi заработало после того, как в строке крипта if fx_name:match("VSTi") then mute_pos = fx end поменял на ("AUi") . Возник вопрос, можно сделать один универсальный скрипт для VSTi и AUi? И все же хочется, чтобы инструмент- плагин в первом слоте переходил в байпас после рендринга
 

lil-burn

Well-Known Member
15 Авг 2012
903
638
93
Екатеринбург
Как можно сделать, чтобы действие происходило через определенный промежуток времени, например, каждую минуту? Хочу сделать таймер, который будет показывать, сколько времени ушло на проект и каждую минуту сохранять значение времени в файл
timer.gif
 

EUGEN27771

Well-Known Member
23 Апр 2010
2.293
1.995
113
@Levanter, замените строку
if fx_name:match("VSTi") then mute_pos = fx end на строку
if fx_name:match("VSTi") or fx_name:match("AUi") then mute_pos = fx end
=======
@lil-burn,
Проверять - через reaper.time_precise() - больше минуты - сохранять
 
  • Like
Реакции: Levanter и lil-burn

lil-burn

Well-Known Member
15 Авг 2012
903
638
93
Екатеринбург
@EUGEN27771, ну вот я через os time время замеряю
Код:
font_size = 20
font_name = "Arial"
window_w = 150
window_h = 40
marge = 20
marge2 = 100
line_height = 10

function init(window_w, window_h)
  gfx.init("" , window_w, window_h)
  gfx.setfont(1, font_name, font_size, 'b')
  gfx.a = 1
  gfx.r = 1
  gfx.g = 1
  gfx.b = 1
end

function run()
 
 
  time = os.time()-init
         
      line = 0
     
      gfx.x = marge
     
      gfx_a = 1
      gfx.r = 255/255
      gfx.g = 255/255
      gfx.b = 16/255
--[[   
    line = line + 1
      gfx.x = marge
      gfx.y = line * line_height
      gfx.printf("Hidden env: ")
     
    line = line + 1
      gfx.x = marge
      gfx.y = line * line_height
      gfx.printf("Hidden env: ")
==]]       
    
      line = 0
      gfx.r = 255/255
      gfx.g = 255/255
      gfx.b = 255/255
     
      line = line + 1
      gfx.x = marge + marge2
      gfx.y = line * line_height
      if time < 3600 then
        time_form = '0 hrs '..tostring(math.floor(time/60))..' min '..tostring(math.fmod(time,60))..' sec'
      else
        time_form = tostring(math.floor(time/3600))..' hrs '..tostring(math.fmod(time,60))..' min '..tostring(math.fmod(time,60))..' sec'
      end
      gfx.printf(time_form)
   
         
  gfx.update()
  if gfx.getchar() >= 0 then reaper.defer(run) end

end

init(window_w, window_h)
init = os.time()
ini_path = reaper.GetResourcePath()
run()
Но пока не придумал, как и куда поминутную проверку присобачить.
 

EUGEN27771

Well-Known Member
23 Апр 2010
2.293
1.995
113
@lil-burn, да ну как же - ставь туда в начало,после init, например - last_update = init, и в функции run() проверку, после того, как время взял -
time - last_update>=60 ? (Update(твоя запись в файл); last_update = time) . И все.
 
  • Like
Реакции: lil-burn

@Michael

Well-Known Member
14 Дек 2010
969
1.461
93
Орёл / Москва
@lil-burn, да ну как же - ставь туда в начало,после init, например - last_update = init, и в функции run() проверку, после того, как время взял -
time - last_update>=60 ? (Update(твоя запись в файл); last_update = time) . И все.
Или
PHP:
check = os.time() % 60 == 0
if check then
  -- do something
end
 

EUGEN27771

Well-Known Member
23 Апр 2010
2.293
1.995
113
Да оно то коротко, но секунда тоже время. Раз 20-30 успеет прокрутить в defer. Тоже надо доп. условие
 

Aleksandr Oleynik

Well-Known Member
16 Янв 2007
26.360
20.063
113
62
Киев
@lil-burn, найти Парент не проблема!
Мне нужно чётко знать - данный трек является или нет чьим-то чилдреном.

PS: Всё, Спасибо - разобрался.
Не знал, что reaper.GetTrackDepth( track ) отдаёт эту инфу
 
Последнее редактирование:

Aleksandr Oleynik

Well-Known Member
16 Янв 2007
26.360
20.063
113
62
Киев
Не могу разобраться ещё с одной вещью: уже очень давно как-то её обхожу.....

У трэка есть, на сколько я понимаю, статус - touch и даже есть функция это определяющая -
reaper.GetLastTouchedTrack()
но не могу найти задающую функцию
select ни как не влияет на этот атрибут

На какосовском форуме тоже читал об этой проблемме - отсутствия функции SetLastTouchedTrack()
Пока нашёл для себя только вариант с цикл экшином -


Слона то я и не заметил :(
Есть в экшинах стандартный - set first selected track as last touched track

Всё, можно двигаться дальше
Просто без этого не возможно вставить, например трек в нужное место.....
 
Последнее редактирование:

stepperian

Active Member
20 Окт 2005
184
34
28
Добрый! Я сейчас буду хвалить Александра Олейника за скрипт !_Set BUS Folder with children slog , этот человек сделал не просто мой день , он продлил мне время , и сэкономил мне часы в моей работе, он сделал то что никто не смог сделать, даже на главном форуме reaper, Спасибо вам большое . Я тоже буду рад вам помочь , если в моих силах , спасибо всем кто давал советы , этот скрипт работает , я просто доволен как слон .
 
  • Like
Реакции: lil-burn

EUGEN27771

Well-Known Member
23 Апр 2010
2.293
1.995
113
Немного полезной(или бесполезной) информации по производительности.
Есть цикл - несколько миллионов итераций. Он сам по себе, без вычислений уже занимает какое-то время. В цикле есть опр. вычисления.
Нашел такие вещи - x*x - быстрее, чем x^2 (всегда, кстати, думал, почему в JS все так пишут) - процентов на 5-10 быстрее.
Умножение быстрее, чем деление, но если используются заведомо целые - int( 5.3 поддерживает типы), то быстрее x/2, чем x*0.5 - это важно.
Но это не главное - вот какая штука оказалась самая интересная:
Стандартная математическая библиотека.
Цикл:
local x = 0
for i = 1, 2000000 do
x = x + math.sqrt(i)
end
=========
А вот этот цикл на 30% быстрее:
local x = 0
local sqrt = math.sqrt
for i = 1, 2000000 do
x = x + sqrt(i)
end
=======
Можете проверить.
Почему - описано на lua.org . Эта банальность сэкономила мне почти 50% - было несколько math.- функций. Может еще кому-то пригодится.
Ну, и я все-таки допилил гейт, теперь велосити и позиции практически на 99% распознаются - в JS - пока его использую для экспериментов, может потом и JS-версию доделаю и выложу. В мультике 32-е, но вообще-то и 64-е можно подобрать.
[DOUBLEPOST=1467881563][/DOUBLEPOST]@Aleksandr Oleynik, оно становится особо интересным, когда становится просто необходимым.
Перенес сюда, перепутал.
 

EUGEN27771

Well-Known Member
23 Апр 2010
2.293
1.995
113
А еще, я бы хотел узнать что-то конкретное про сопрограммы(coroutine), возможно, Михаил туда заглядывал...
Но видимо, придется узнавать самостоятельно, что в общем-то интересно. Это, на первый взгляд, может решить несколько важных проблем.
 

Aleksandr Oleynik

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

EUGEN27771

Well-Known Member
23 Апр 2010
2.293
1.995
113
Применение сопрограмм может оказаться полезным в циклических программах.
Например, в игровых программах работает основной цикл отрисовки кадров,
между шагами которого производится обработка ввода от пользователя,
моделирование и другая работа. Поскольку отрисовка кадров должна производиться
равномерно с частотой порядка 25 кадров в секунду, то выполнение
продолжительных вычислений между кадрами недопустимо.

Механизм сопрограмм позволяет «размазать» выполнение алгоритма продолжительной функции
мелкими порциями между шагами основного цикла. В данном примере алгоритм функции f
разбит на три шага с возвратом управления после каждого шага. В каждом шаге основного
цикла программы производится продолжение выполнения сопрограммы, если она еще не
завершила работу окончательно.
У меня в отрисовке стоит на разное время разная плотность пикселей.
Это выглядит хреново на больших участках, а при зуме, каждый пиксел растягивается на уровень зума.
Drum to MIDI(Zoom bug).gif
Можно сделать детальную отрисовку при увеличении - но пока не знаю, что эффективнее.
Я хочу разделить процесс на части, пока у скрипта имеется свободное время(и у меня тоже:)).
Пусть он рисует в буфер и все. Это, вроде и предполагают сопрограммы.
[DOUBLEPOST=1467884834][/DOUBLEPOST]@Aleksandr Oleynik, нет, это способ приостановить вычисления, когда нужно и возобновить, когда нужно
 

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