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

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

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

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

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

гиф >> https://yadi.sk/i/7tIY7TxBsrfYe
 
Мне сегодня Сын сделал парсер на чанки, но спецефический.
У меня в одном и том-же проекте создаётся куча композиций, ну и сохраняются они частично через чанки трэков. Но по скольку в какой-то следующей композиции может оказаться так, что на трек нужно добавить плагин, а его не было в куче предидуших композициях, пришлось сделать механизм, который при появлении нового плага на трэке в чанки всех сохраненных ранее композиций его добовляет, но байпасным.
Иначе, при вызове композиции в которой плагина этого небыло, он просто исчезал.

PS: Вообще очень жаль, что в чанках нет возможности ставить игнорирование части меток, например игнорировать не описанные FX-ы. Ну или сенды трека, или другие его параметры.
 
Последнее редактирование:
Наконец-то он начал как-то дышать.
Drum%20to%20MIDI(Test3).gif
Фильтр теперь хреначит как бульдозер 45 секунд стерео за 250мс при абсолютно любых настройках на моем старом компе. Теперь остальное вносит больше задержки, но уже довольно быстро и будет еще быстрее.
При всех косяках, и с учетом, что это только задумка пока, она из простых лупов основные инструменты(кик,снейр,хет) вытаскивает на ура.
Главное - это достаточно удобно(или я уже привык просто:)).
Ошибки, конечно, есть(велосити, позиции чуть гуляют). Надо все это хотя бы попытаться довести до ума. Гейт этот полностью перепиливать, он для диэссера был нормальный, но тут надо кое-что покруче и точнее, и с велосити сразу что-то решать. Но уже хоть как-то.
 
@Levanter, по поводу фриза вст
есть подозрение что у тебя отключена опции показывать все тейки и ты видишь только один аудио айтем.. midi айтем никуда не удаляется-он мьютится и остается в неактивном тейке
включи show all takes in lane
 
Парни!!!!!
Читайте правила раздела!!!!!
Обсуждения все в другой теме - тут постят только те, кто пишет скрипты и без обсуждений!
 
@SKlogic, спасибо! Так и есть, после show all takes in lane все теки наместе. Еще один момент скрипт работает с VSTi. С AUi заработало после того, как в строке крипта if fx_name:match("VSTi") then mute_pos = fx end поменял на ("AUi") . Возник вопрос, можно сделать один универсальный скрипт для VSTi и AUi? И все же хочется, чтобы инструмент- плагин в первом слоте переходил в байпас после рендринга
 
Как можно сделать, чтобы действие происходило через определенный промежуток времени, например, каждую минуту? Хочу сделать таймер, который будет показывать, сколько времени ушло на проект и каждую минуту сохранять значение времени в файл
timer.gif
 
@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
@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()
Но пока не придумал, как и куда поминутную проверку присобачить.
 
@lil-burn, да ну как же - ставь туда в начало,после init, например - last_update = init, и в функции run() проверку, после того, как время взял -
time - last_update>=60 ? (Update(твоя запись в файл); last_update = time) . И все.
 
  • Like
Реакции: lil-burn
@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
 
Да оно то коротко, но секунда тоже время. Раз 20-30 успеет прокрутить в defer. Тоже надо доп. условие
 
@lil-burn, найти Парент не проблема!
Мне нужно чётко знать - данный трек является или нет чьим-то чилдреном.

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

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

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


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

Всё, можно двигаться дальше
Просто без этого не возможно вставить, например трек в нужное место.....
 
Последнее редактирование:
Добрый! Я сейчас буду хвалить Александра Олейника за скрипт !_Set BUS Folder with children slog , этот человек сделал не просто мой день , он продлил мне время , и сэкономил мне часы в моей работе, он сделал то что никто не смог сделать, даже на главном форуме reaper, Спасибо вам большое . Я тоже буду рад вам помочь , если в моих силах , спасибо всем кто давал советы , этот скрипт работает , я просто доволен как слон .
 
  • Like
Реакции: lil-burn
Немного полезной(или бесполезной) информации по производительности.
Есть цикл - несколько миллионов итераций. Он сам по себе, без вычислений уже занимает какое-то время. В цикле есть опр. вычисления.
Нашел такие вещи - 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-е можно подобрать.
Drum%20to%20MIDI(JS%20variant%20Velo%20and%20pos%20test2).gif
[DOUBLEPOST=1467881563][/DOUBLEPOST]@Aleksandr Oleynik, оно становится особо интересным, когда становится просто необходимым.
Перенес сюда, перепутал.
 
А еще, я бы хотел узнать что-то конкретное про сопрограммы(coroutine), возможно, Михаил туда заглядывал...
Но видимо, придется узнавать самостоятельно, что в общем-то интересно. Это, на первый взгляд, может решить несколько важных проблем.
 
А еще, я бы хотел узнать что-то конкретное про сопрограммы(coroutine)
Я так понимаю, что это просто способ распаралелить вычисление, запустить сложные и длительные вычисления параллельно любым кол-вом потоков.
 
Применение сопрограмм может оказаться полезным в циклических программах.
Например, в игровых программах работает основной цикл отрисовки кадров,
между шагами которого производится обработка ввода от пользователя,
моделирование и другая работа. Поскольку отрисовка кадров должна производиться
равномерно с частотой порядка 25 кадров в секунду, то выполнение
продолжительных вычислений между кадрами недопустимо.

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

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