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

  • Автор темы Автор темы drzhnn
  • Дата начала Дата начала
http://t.me/joinchat/Er2FHUhlTsH43JzhLeYvNg - канал в телеге для всего, что связано с моими скриптами, если кто-то ими пользуется.

Для этих же гипотетических людей рекомендую установить Various_functions. Это набор функций, который уже используется в некоторых скриптах, и большая часть других будет в дальнейшем также от него зависима. Если у вас выключена галка ReaPack/ManageRepositories/Install new packages when syncronizing, это файл нужно пометить для обновления вручную.
 
Последнее редактирование:
Коллеги, по моему емнип, кто то из наших ребят ведь делал скрипт "диеесер" штатными плагинами рипера?! Там он отрезал эски на отдельную дорогу, потом огибающую громкости рисовал и удалял эти эски.
Вообщем если вас не затруднит, кто нить может сделать скрипт, но чтобы он сибилянты отделял на соседний трек, вырезая их из оригинала? Это реально вообще сделать? Или тот скрипт переделать?
 
  • Like
Реакции: Wefilev
@@Michael, @borisuperful, @EUGEN27771, сможете помочь мне с этим скриптом что я выше писал? чтобы сибилянты он отрезал на отдельную дорожку с фейдами, чтобы можно было их отдельно от основного вокала обрабатывать?
 
В версии REAPER 5.93 скрипт : Script: X-Raym_Move selected tracks up on visible track list.lua
стал выкидывать окошко ,показано на гифке.
Как это дело исправить?
 

Вложения

  • 33.gif
    33.gif
    547,3 KB · Просмотры: 208
Возращаюсь к больной теме. Не появился ли еще скрипт позволяющий стретчить группу итемов мышкой, как обычной стретч, по аналогии с «Item: Move and stretch items to fit time selection», но без выделения области под которую стретчить? Что-то наподобии Вегаса. Может с добавлением модификатора с клавишей WIN теперь это возможно реализовать? Может кто-то написать такой скрипт? Не пойму почему они по дефолту не предусмотрели такую возможность, в монтаже звука для видео и аудиороликов эта вещь просто обязана быть.
 
Не подскажите, почему перестали работать скрипты показывающие огибающие параметров которые трогал последними?
Не так давно сделал кнопку с экшеном - "FX: Show/hide track envelope for last touched FX parameter", работала нормално, как-то про неё забыл, и не пользовался этой функцией, да и рипер не часто включал.
Сейчас вот понадобилось, и не работает. Кнопку жму, через окно экшенов запускаю - ничего, не реагирует. Попробовал похожий скрипт - "Script: mpl_Show envelopes for last touched FX.lua" - тоже не работает.
Если посмотреть последние "тронутые" параметры через окно огибающих на треке, то видно, что рипер определяет правильно последние "тронутые" параметры.
 
Угодил, он перестал работать.
Рипер последний.
 
Подскажите пожалуйста
Как сделать, чтобы все FXы на треках отключались в bypass, но не затрагивались инструменты VSTi и AUi, без выделения треков, просто одним нажанием?
 
Скрипт работает, его, правда нужно переименовать:
Show existing envelopes for last touched FX
Т.е. он показывает все существующие огибающие для всех параметров последнего тронутого FX.

FX: Show/hide track envelope for last touched FX parameter
помимо того, что показывает, создаёт огибающие, если их раньше не было
 
  • Like
Реакции: walks
Разницу понял, спасибо. Но вопрос в том, почему перестал работать Show/hide track envelope for last touched FX parameter. До этого работал нормально.
 
Всем добрый вечер, у меня второй заход на рипер. и я решил разобраться со скриптами, - скачал реапак, кинул в узерплагин, открыл в браузере, через вкладки сделал инстал, установилось всё!! и всё появилось в экшенах, я выбираю скрипт, назначаю кнопку - и скрипт не работает, НОО. всё работает в чужих конфигах??? Скажите, где я что пропустил? и правильнл ли я понял, что скачивая reapack, уже не надо копировать и вставлять куда -то текст-символы конкретного скрипта?
 
прочитал, - ещё до вашеё ссылки, прочитал многое в теме и в соседних, и видео посмотрел - не одно , и делал всё, вроде бы , по инструкции, - и описал алгоритм своих действий - ожидая вразумительный ответ от коллег - музыкантов, мне от рипера много не надо -типа чтоб при потрясывании он переливался пурпурно- зелёным, хотя бы плей начинался с момента остановки пробела- без ентера, SWS-ы работают, а скрипы - нет, а в скачаных конфигах - да, но конфиги мне не подходят - в одном из них, например, все сделано зачем то под сонар, и убиты классные штуки рипера
 
@@Michael, здравствуйте, не работают Script:amagaima Toggle behavior of Play- Stop buttons.lua, Script: Exclusive solo for Selected Track.lua - другие не проверял - начал с этих - и споткнулся, но ,как уже выше дважды писал, в чужих конфигах всё это работает, и я не пойму - где что- то не так пошло или я что- то не доделал?...
p.s. ну, к слову, добавляю через экшен - лоад другие скрипты - работают..
 
Последнее редактирование:
Script:amagaima Toggle behavior of Play- Stop buttons.lua
Этот скрипт состоит из двух частей, они работают вместе.
Первый - amagaima Toggle behavior of Play- Stop buttons.lua назначается только на кнопку, чтобы переключать способ воспроизведения.
А на Space нужно назначить основной скрипт: amagalma_Transport Play-Stop (with memory - no undo).lua
Так будет всё работать.

Exclusive solo for Selected Track.lua
Простой, там сложно что-то напутать. Главное не на S треков нажимать, а просто выделять их :)

в одном из них, например, все сделано зачем то под сонар
Он, в первую очередь, сделан для пользователей, привыкших к Сонару. Фишки Рипера все есть в дефолтном конфиге, без стороннего вмешательства.
 
@Kokarev Maxim, спасибо за ответ, всё как надо заработало ! Ну а насчёт конфига - тут конечно, каждый под себя собирает, дефолтный рипер - это полуфабрикат, и по цвету и по кнопкам
 
@borisuperful, так?
PHP:
local undo = "Insert new MIDI item"
local tr, retval, name, m_pos, qn_st, qn_end, ts_st, ts_end
function qntime(qn) local num = reaper.TimeMap2_QNToTime(0, qn) return num end
function timesel(bool)
local ts_st, ts_end = reaper.GetSet_LoopTimeRange(bool, false, 0, 0, false)
return ts_st, ts_end
end
function insert(st_p, end_p)
local item = reaper.CreateNewMIDIItemInProj(tr, st_p, end_p, false)
reaper.GetSetMediaItemTakeInfo_String(reaper.GetActiveTake(item), 'P_NAME', name, true)
reaper.SetMediaItemInfo_Value(item, 'B_LOOPSRC', 0)
reaper.SetMediaItemSelected(item, true)
end
reaper.BR_GetMouseCursorContext()
tr = reaper.BR_GetMouseCursorContext_Track()
if not tr then return end
reaper.Undo_BeginBlock()
reaper.PreventUIRefresh(-1)
retval, name = reaper.GetSetMediaTrackInfo_String(tr, 'P_NAME', '', false)
m_pos = reaper.BR_GetMouseCursorContext_Position()
retval, qn_st, qn_end = reaper.TimeMap_QNToMeasures(0, reaper.TimeMap_timeToQN(m_pos))
ts_st, ts_end = timesel(false)
if ts_st ~= ts_end then insert(ts_st, ts_end) timesel(true)
else local msr_st, msr_end = qntime(qn_st), qntime(qn_end) insert(msr_st, msr_end)
end
reaper.PreventUIRefresh(1)
reaper.Undo_EndBlock(undo, -1)

Крутейший скрипт, спасибо! А есть ли возможность сделать то же самое, но для создания Automation Items? Я попробовал сам адаптировать этот скрипт, но не нашёл полных аналогов команд для автоматизации, на этом мои програмистские способности иссякли :)
 
Ребята, помогите допилить скрипт. Нужно всего две вещи: ОБНОВЛЁННАЯ ЗАДАЧА ПОСТОМ НИЖЕ!
1. Реакция кнопок на toggle статус функции (например: включена функция = подсвечена кнопка)
2. (не так обязательно) Возможность внешний вид кнопок сделать в виде изображений.


За основу я использовал тимплейт @EUGEN27771. Мой код на данный момент:


Код:
--[[
   * Simple GUI template for scripts
   * Author: EUGEN27771
   * Author URI: http://forum.cockos.com/member.php?u=50462
   * Licence: GPL v3
   * Version: 1.0
  ]]

--------------------------------------------------------------------------------
---   Simple Element Class   ---------------------------------------------------
--------------------------------------------------------------------------------
local Element = {}
function Element:new(x,y,w,h, r,g,b,a, lbl,fnt,fnt_sz, norm_val,norm_val2)
    local elm = {}
    elm.def_xywh = {x,y,w,h,fnt_sz} -- its default coord,used for Zoom etc
    elm.x, elm.y, elm.w, elm.h = x, y, w, h
    elm.r, elm.g, elm.b, elm.a = r, g, b, a
    elm.lbl, elm.fnt, elm.fnt_sz  = lbl, fnt, fnt_sz
    elm.norm_val = norm_val
    elm.norm_val2 = norm_val2
    ------
    setmetatable(elm, self)
    self.__index = self
    return elm
end
--------------------------------------------------------------
--- Function for Child Classes(args = Child,Parent Class) ----
--------------------------------------------------------------
function extended(Child, Parent)
  setmetatable(Child,{__index = Parent})
end
--------------------------------------------------------------
---   Element Class Methods(Main Methods)   ------------------
--------------------------------------------------------------
function Element:update_xywh()
  if not Z_w or not Z_h then return end -- return if zoom not defined
  self.x, self.w = math.ceil(self.def_xywh[1]* Z_w) , math.ceil(self.def_xywh[3]* Z_w) -- upd x,w
  self.y, self.h = math.ceil(self.def_xywh[2]* Z_h) , math.ceil(self.def_xywh[4]* Z_h) -- upd y,h
  if self.fnt_sz then --fix it!--
     self.fnt_sz = math.max(9,self.def_xywh[5]* (Z_w+Z_h)/2)
     self.fnt_sz = math.min(22,self.fnt_sz)
  end
end
------------------------
function Element:pointIN(p_x, p_y)
  return p_x >= self.x and p_x <= self.x + self.w and p_y >= self.y and p_y <= self.y + self.h
end
--------
function Element:mouseIN()
  return gfx.mouse_cap&1==0 and self:pointIN(gfx.mouse_x,gfx.mouse_y)
end
------------------------
function Element:mouseDown()
  return gfx.mouse_cap&1==1 and self:pointIN(mouse_ox,mouse_oy)
end
--------
function Element:mouseClick()
  return gfx.mouse_cap&1==0 and last_mouse_cap&1==1 and
  self:pointIN(gfx.mouse_x,gfx.mouse_y) and self:pointIN(mouse_ox,mouse_oy) 
end
------------------------
function Element:mouseR_Down()
  return gfx.mouse_cap&2==2 and self:pointIN(mouse_ox,mouse_oy)
end
--------
function Element:mouseM_Down()
  return gfx.mouse_cap&64==64 and self:pointIN(mouse_ox,mouse_oy)
end
------------------------
function Element:draw_frame()
  local x,y,w,h  = self.x,self.y,self.w,self.h
  gfx.rect(x, y, w, h, false)            -- frame1
  gfx.roundrect(x, y, w-1, h-1, 3, true) -- frame2 
end
----------------------------------------------------------------------------------------------------
---   Create Element Child Classes(Button,Slider,Knob)   -------------------------------------------
----------------------------------------------------------------------------------------------------
local Button = {}

extended(Button,     Element)


--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
---   Button Class Methods   ---------------------------------------------------
--------------------------------------------------------------------------------
function Button:draw_body()
    gfx.rect(self.x,self.y,self.w,self.h, true) -- draw btn body
end
--------
function Button:draw_lbl()
    local x,y,w,h  = self.x,self.y,self.w,self.h
    local lbl_w, lbl_h = gfx.measurestr(self.lbl)
    gfx.x = x+(w-lbl_w)/2; gfx.y = y+(h-lbl_h)/2
    gfx.drawstr(self.lbl)
end
------------------------
function Button:draw()
    self:update_xywh() -- Update xywh(if wind changed)
    local r,g,b,a  = self.r,self.g,self.b,self.a
    local fnt,fnt_sz = self.fnt, self.fnt_sz
    -- Get mouse state ---------
          -- in element --------
          if self:mouseIN() then a=a+0.1 end
          -- in elm L_down -----
          if self:mouseDown() then a=a+0.2 end
          -- in elm L_up(released and was previously pressed) --
          if self:mouseClick() and self.onClick then self.onClick() end
    -- Draw btn body, frame ----
    gfx.set(r,g,b,a)    -- set body color
    self:draw_body()    -- body
    self:draw_frame()   -- frame
    -- Draw label --------------
    gfx.set(0.8, 0.8, 0.8, 1)   -- set label color
    gfx.setfont(1, fnt, fnt_sz) -- set label fnt
    self:draw_lbl()             -- draw lbl
end



----------------------------------------------------------------------------------------------------
---   START   --------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------
---   Buttons and Functions   ------------------------------------------------------------------
----------------------------------------------------------------------------------------------------
local btn1 = Button:new(20,20,50,30, 0.3,0.3,0.3,1, "1","Arial",15, 0 )
btn1.onClick =
function ()
reaper.Main_OnCommand(40781, 0)  ---Track: Select all tracks
end

local btn2 = Button:new(73,20,50,30, 0.3,0.3,0.3,1, "1/2","Arial",15, 0 )
btn2.onClick =
function ()
reaper.Main_OnCommand(40780, 0)  ---Track: Select all tracks
end


local btn3 = Button:new(126,20,50,30, 0.3,0.3,0.3,1, "1/4","Arial",15, 0 )
btn3.onClick =
function ()
reaper.Main_OnCommand(40779, 0)  ---Track: Select all tracks
end

local btn4 = Button:new(179,20,50,30, 0.3,0.3,0.3,1, "1/8","Arial",15, 0 )
btn4.onClick =
function ()
reaper.Main_OnCommand(40778, 0)  ---Track: Select all tracks
end

local btn5 = Button:new(232,20,50,30, 0.3,0.3,0.3,1, "1/16","Arial",15, 0 )
btn5.onClick =
function ()
reaper.Main_OnCommand(40776, 0)  ---Track: Select all tracks
end

local btn6 = Button:new(285,20,50,30, 0.3,0.3,0.3,1, "1/32","Arial",15, 0 )
btn6.onClick =
function ()
reaper.Main_OnCommand(40775, 0)  ---Track: Select all tracks
end

local btn7 = Button:new(338,20,50,30, 0.3,0.3,0.3,1, "1/64","Arial",15, 0 )
btn7.onClick =
function ()
reaper.Main_OnCommand(40774, 0)  ---Track: Select all tracks
end

local btn8 = Button:new(391,20,50,30, 0.3,0.3,0.3,1, "1/128","Arial",15, 0 )
btn8.onClick =
function ()
reaper.Main_OnCommand(41047, 0)  ---Track: Select all tracks
end

local btn9 = Button:new(444,20,50,30, 0.3,0.3,0.3,1, "-3-","Arial",15, 0 )
btn9.onClick =
function ()
reaper.Main_OnCommand(reaper.NamedCommandLookup('_SWS_AWTOGGLETRIPLET'), 0)
end

local Button_TB = {btn1,btn2,btn3,btn4,btn5,btn6,btn7,btn8,btn9}
-----

-----


----------------------------------------------------------------------------------------------------
---   Main DRAW function   -------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------
function DRAW()
    for key,btn     in pairs(Button_TB)   do btn:draw()    end
end

--------------------------------------------------------------------------------
--   INIT   --------------------------------------------------------------------
--------------------------------------------------------------------------------
function Init()
    -- Some gfx Wnd Default Values --
    local R,G,B = 51,51,51               -- 0..255 form
    local Wnd_bgd = R + G*256 + B*65536  -- red+green*256+blue*65536
    local Wnd_Title = "Set Grid Toolbar"
    local Wnd_Dock,Wnd_X,Wnd_Y = 0,100,320
    Wnd_W,Wnd_H = 512,70 -- global values(used for define zoom level)
    -- Init window ------
    gfx.clear = Wnd_bgd 
    gfx.init( Wnd_Title, Wnd_W,Wnd_H, Wnd_Dock, Wnd_X,Wnd_Y )
    -- Init mouse last --
    last_mouse_cap = 0
    last_x, last_y = 0, 0
    mouse_ox, mouse_oy = -1, -1
end
----------------------------------------
--   Mainloop   ------------------------
----------------------------------------
function mainloop()
    -- zoom level --
    Z_w, Z_h = gfx.w/Wnd_W, gfx.h/Wnd_H
    if Z_w<0.6 then Z_w = 0.6 elseif Z_w>2 then Z_w = 2 end
    if Z_h<0.6 then Z_h = 0.6 elseif Z_h>2 then Z_h = 2 end
    -- mouse and modkeys --
    if gfx.mouse_cap&1==1   and last_mouse_cap&1==0  or   -- L mouse
       gfx.mouse_cap&2==2   and last_mouse_cap&2==0  or   -- R mouse
       gfx.mouse_cap&64==64 and last_mouse_cap&64==0 then -- M mouse
       mouse_ox, mouse_oy = gfx.mouse_x, gfx.mouse_y
    end
    Ctrl  = gfx.mouse_cap&4==4
    Shift = gfx.mouse_cap&8==8
    Alt   = gfx.mouse_cap&16==16 -- Shift state
    -------------------------
    -- DRAW,MAIN functions --
      DRAW() -- Main()
    -------------------------
    -------------------------
    last_mouse_cap = gfx.mouse_cap
    last_x, last_y = gfx.mouse_x, gfx.mouse_y
    gfx.mouse_wheel = 0 -- reset gfx.mouse_wheel
    char = gfx.getchar()
    if char==32 then reaper.Main_OnCommand(40044, 0) end -- play
    if char==26 then reaper.Main_OnCommand(40029, 0)  end ---undo
    if char == 27 then gfx.quit() end   -- escape
    if char~=-1 then reaper.defer(mainloop) end          -- defer
    -----------
    gfx.update()
    -----------
end
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
------
Init()
mainloop()

Готов донатить.

Задача - повторить скриптом то, что сейчас происходит в доке над окном скрипта:
 

Вложения

  • set_grid_lua2.gif
    set_grid_lua2.gif
    59,7 KB · Просмотры: 192
Последнее редактирование:
Обновление по скрипту тулбара.
Нашёл простое и изящное решение - отображение статуса в окошке. Просто текст. Для этого я создал код, он работает как нужно - это смесь из кода @@Michael, и Lokasenna. Но, не могу его прикрутить к основному - если код вставлять тупо на каждую кнопку, то показания начинают наслаиваться друг на друга, или отображение начинается только после того, как нажму цифру 1... это всё не то.
На скриншоте и в аттаче оба кода, которые готовы на данный момент:
Set Grid Toolbar.lua - основной код/шаблон.
Test.lua - код, который подхватывает статус Grid Division и выводит его при запуске.
Задача - сделать так, чтобы в зелёном окошке основного кода отображался актуальный статус Grid Division - и при запуске скрипта, и при переключении кнопок. Я за эти два дня проделал много работы, но дальше методом тыка не продвинусь, всё ещё нуждаюсь в помощи того, кто разбирается.

Untitled.jpg
 

Вложения

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