求助:求一个好用的重新调整区间结尾位置的脚本。

问题详情

就是想能够自动的调整当前区间的结尾位置。
也不需要一次性调整所有的区间,只调整当前的就可以。

做过的尝试

我自己尝试做脚本去解决。总是不成功。要不是只去修改工程的第一个区间。就是把我所有的区间都给删除了。

我设计的逻辑是,先将编辑光标定位到区间结束位置附近的最后一个对象的右侧边缘,获取位置,然后获取区间开头位置存储,清除当前区间。再以获取的区间开头位置和最后一个对象的右侧边缘位置来重新建立区间。
But,就是不成功啊。怎么破呢。。。。

逻辑:
获取光标位置
获取光标所在region
以region边界建立time selection
选中time selection中所有item
以选中item建立time selection
获取time selection边界
调整region边界

好嘞。我试试这么搞一下。
昨天搞了好几个小时这个。我都快要放弃了。

脚本◁===▷Script: acendan_Set nearest regions edges to selected media items.lua
脚本◁===▷Script: acendan_Stretch overlapping regions to edges of selected media items.lua
脚本◁===▷Script: acendan_Stretch overlapping regions edges to time selection.lua
也可以参考这几个lua的命令

自动批量调整不大现实

按照N大佬的逻辑是可以搞定的

嗯。不批量。其实从实际使用出发,能对当前区间做规整就完全可以了。

嗯。我也觉得noiZ神的逻辑没问题。等给人监制完录音。我就搞一搞。

大佬的逻辑简单易懂,顺手写了代码请大佬指导下

local cur_pos = reaper.GetCursorPosition()
local _, Rgn = reaper.GetLastMarkerAndCurRegion(0, cur_pos)
if Rgn then
local _, _, Rgn_L, Rgn_R, Rgn_name, Rgn_idx = reaper.EnumProjectMarkers(Rgn)
reaper.GetSet_LoopTimeRange(true, false, Rgn_L, Rgn_R, false)
reaper.Main_OnCommand(40717, 0)
reaper.Main_OnCommand(40290, 0)
local _, LTRgn_R = reaper.GetSet_LoopTimeRange(0, 0, 0, 0, 0)
reaper.SetProjectMarker(Rgn_idx, true, Rgn_L, LTRgn_R, Rgn_name)
end
reaper.Main_OnCommand(40020, 0)

if Rgn then

应该是

if Rgn>=0 then

Rgn是个数字

对对,忘记了,多谢大佬

该说不说。你这顺手写的代码已经执行的特别完美了。比我熬了好几个小时弄的都强。又干净又好用的。
在最后一个对象在区间内,这个代码执行的效果几乎是完美的。但是最后一个对象在区间外执行好像没有效果呢。
我也琢磨琢磨。要不都不好直接用代码做出脚本。哈哈哈

这个我也去试试看。
&我把这个脚本的ReaPack发出来,省的想要的朋友再去找了。不过是Github的。
https://acendan.github.io/reascripts/index.xml

仅考虑所有item至少有一部分在region内的情况