@怪力乱神 好吧。哎,谢谢。。。
重新定位對象脚本3件套
-
【重新定位对象】将所有选定的对象按照先后顺序重新定位。支持对话框输入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
-
重新定位对象更新
模式0选定的item按轨道单独排序,模式1选定的item按时间线排序,模式2选定的item按先后位置排序。
合并展开选定的Item
脚本名:
zaibuyidao_Reposition Items
zaibuyidao_Move Items To Track (Implode)
zaibuyidao_Move Items To Track (Explode)从 Reapack 仓库下载:
https://github.com/zaibuyidao/ReaScripts/raw/master/index.xml
https://forum.reaget.com/mirrors/zaibuyidao/ReaScripts/index.xml(Tee佬提供的国内专线)