【重新定位对象】将所有选定的对象按照先后顺序重新定位。支持对话框输入X秒,按照需要设定每个item之间的距离。
第一个选项:时间间隔,单位秒;
第二个选项:从对象的开始位置定位(填0),或对象的结束位置定位(填1)。
相似功能: Xenakios/SWS: Reposition selected items…,不过两者功能上有所区别,SWS版本是每个轨道的item单独定位,我的脚本是所有选中的item(不区分轨道)一起定位。
!
食用方法:
把以下代码另存为 .lua 文件放到 C:\REAPER\Scripts 脚本文件中,在动作列表里面载入就可以用了。
或从ReaPack下载(新版本暂未上传)。
重新定位选中的对象:
--zaibuyidao_Reposition Items.lua
count_sel_items = reaper.CountSelectedMediaItems(0)
if count_sel_items > 0 then
reaper.PreventUIRefresh(1)
reaper.Undo_BeginBlock() -- 撤消塊開始
local interval = reaper.GetExtState("RepositionItems", "Interval")
local toggle = reaper.GetExtState("RepositionItems", "Toggle")
if (interval == "") then interval = "1" end
if (toggle == "") then toggle = "1" end
local user_ok, user_input_csv = reaper.GetUserInputs("重新定位對象", 2, "時間間隔(秒),0=對象開始 1=對象結束", interval ..','.. toggle)
if not user_ok or not tonumber(interval) then return end
interval, toggle = user_input_csv:match("(.*),(.*)")
if not tonumber(interval) or not tonumber(toggle) then return end
reaper.SetExtState("RepositionItems", "Interval", interval, false)
reaper.SetExtState("RepositionItems", "Toggle", toggle, false)
local item_list = {} -- 收集所有選定item
for i = 0, count_sel_items - 1 do
item = reaper.GetSelectedMediaItem(0, i)
table.insert(item_list, item)
end
for k, item in ipairs(item_list) do
item_next_start = reaper.GetMediaItemInfo_Value(item_list[k], "D_POSITION")
item_next_end = reaper.GetMediaItemInfo_Value(item_list[k], "D_LENGTH") + item_next_start
if k < count_sel_items then
if toggle == "1" then
reaper.SetMediaItemInfo_Value(item_list[k + 1], "D_POSITION", item_next_end + interval)
elseif toggle == "0" then
reaper.SetMediaItemInfo_Value(item_list[k + 1], "D_POSITION", item_next_start + interval)
end
end
end
reaper.Undo_EndBlock("重新定位對象", -1) -- 撤消塊結束
reaper.UpdateArrange()
reaper.PreventUIRefresh(-1)
end
另外一个脚本,将所有选中的item移动到第一个选中的item所在的轨道:
--zaibuyidao_Move Items To Track Of First Selected Item.lua
count_sel_items = reaper.CountSelectedMediaItems(0)
if count_sel_items > 0 then
reaper.PreventUIRefresh(1)
reaper.Undo_BeginBlock() -- 撤消塊開始
for i = 0, count_sel_items - 1 do
item = reaper.GetSelectedMediaItem(0, i)
if i == 0 then
track = reaper.GetMediaItem_Track(item)
end
reaper.MoveMediaItemToTrack(item, track)
end
reaper.Undo_EndBlock("Move Items To Track Of First Selected Item", -1) -- 撤消塊結束
reaper.UpdateArrange()
reaper.PreventUIRefresh(-1)
end