重新定位對象脚本3件套



  • 【重新定位对象】将所有选定的对象按照先后顺序重新定位。支持对话框输入X秒,按照需要设定每个item之间的距离。
    第一个选项:时间间隔,单位秒;
    第二个选项:从对象的开始位置定位(填0),或对象的结束位置定位(填1)。

    相似功能: Xenakios/SWS: Reposition selected items...,不过两者功能上有所区别,SWS版本是每个轨道的item单独定位,我的脚本是所有选中的item(不区分轨道)一起定位。

    repos item.gif

    食用方法:

    把以下代码另存为 .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按先后位置排序。
    Reposition Items.gif

    合并展开选定的Item
    Move Items To Track.gif

    脚本名:
    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佬提供的国内专线)


Log in to reply
 

建议的主题