Moves the time selection to the right by whatever the loop length is. So if loop length is 4 bars, this moves it 4 bars to the right.
local lstart, lend
lstart, lend = reaper.GetSet_LoopTimeRange(false, true, 0, 0, false)
local dl = lend-lstart
if dl > 0 then
nstart = lstart + dl
nend = lend + dl
reaper.GetSet_LoopTimeRange(true,true,nstart,nend,false)
end
It is simple to make a script that moves it to the left (and does nothing if it is already too close to the start).
nstart = lstart - dl
nend = lend - dl
if nstart >= 0 then
reaper.GetSet_LoopTimeRange(true,true,nstart,nend,false)
end
Other similar scripts you can write are to double/half the length
dl *= 2
nstart = lstart
nend = lstart + dl
Simples.
Examples
These are my current scripts. The names should be explanatory
set_time_sel_1bar.lua
--[[
Lua: number start, number end = reaper.GetSet_LoopTimeRange(boolean isSet, boolean isLoop, number start, number end, boolean allowautoseek)
]]--
tstart,tend = reaper.GetSet_LoopTimeRange(false,false,0,0,0)
num,denom,tempo = reaper.TimeMap_GetTimeSigAtTime(0,tstart)
qn_per_bar = 4.0*num/denom
offset = 1.0*qn_per_bar
bstart = reaper.TimeMap_timeToQN(tstart)
bend = reaper.TimeMap_timeToQN(tend)
nbend = bstart + offset
ntend = reaper.TimeMap_QNToTime(nbend)
reaper.GetSet_LoopTimeRange(true,true,tstart,ntend,true)
set_time_sel_1beat.lua
tstart,tend = reaper.GetSet_LoopTimeRange(false,false,0,0,0)
bstart = reaper.TimeMap_timeToQN(tstart)
bend = reaper.TimeMap_timeToQN(tend)
nbend = bstart + 1.0
ntend = reaper.TimeMap_QNToTime(nbend)
reaper.GetSet_LoopTimeRange(true,true,tstart,ntend,true)
set_time_sel_2bars.lua
tstart,tend = reaper.GetSet_LoopTimeRange(false,false,0,0,0)
num,denom,tempo = reaper.TimeMap_GetTimeSigAtTime(0,tstart)
qn_per_bar = 4.0*num/denom
offset = 2.0*qn_per_bar
bstart = reaper.TimeMap_timeToQN(tstart)
bend = reaper.TimeMap_timeToQN(tend)
nbend = bstart + offset
ntend = reaper.TimeMap_QNToTime(nbend)
reaper.GetSet_LoopTimeRange(true,true,tstart,ntend,true)
set_time_sel_2beats.lua
tstart,tend = reaper.GetSet_LoopTimeRange(false,false,0,0,0)
bstart = reaper.TimeMap_timeToQN(tstart)
bend = reaper.TimeMap_timeToQN(tend)
nbend = bstart + 2.0
ntend = reaper.TimeMap_QNToTime(nbend)
reaper.GetSet_LoopTimeRange(true,true,tstart,ntend,true)
set_time_sel_4bars.lua
tstart,tend = reaper.GetSet_LoopTimeRange(false,false,0,0,0)
num,denom,tempo = reaper.TimeMap_GetTimeSigAtTime(0,tstart)
qn_per_bar = 4.0*num/denom
offset = 4.0*qn_per_bar
bstart = reaper.TimeMap_timeToQN(tstart)
bend = reaper.TimeMap_timeToQN(tend)
nbend = bstart + offset
ntend = reaper.TimeMap_QNToTime(nbend)
reaper.GetSet_LoopTimeRange(true,true,tstart,ntend,true)
set_time_sel_8bars.lua
tstart,tend = reaper.GetSet_LoopTimeRange(false,false,0,0,0)
num,denom,tempo = reaper.TimeMap_GetTimeSigAtTime(0,tstart)
qn_per_bar = 4.0*num/denom
offset = 8.0*qn_per_bar
bstart = reaper.TimeMap_timeToQN(tstart)
bend = reaper.TimeMap_timeToQN(tend)
nbend = bstart + offset
ntend = reaper.TimeMap_QNToTime(nbend)
reaper.GetSet_LoopTimeRange(true,true,tstart,ntend,true)
time_sel_add_1_bar.lua
tstart,tend = reaper.GetSet_LoopTimeRange(false,false,0,0,0)
num,denom,tempo = reaper.TimeMap_GetTimeSigAtTime(0,tend) -- we take the bar length from the end of the time selection
qn_per_bar = 4.0*num/denom
offset = 1.0*qn_per_bar
bstart = reaper.TimeMap_timeToQN(tstart)
bend = reaper.TimeMap_timeToQN(tend)
nbend = bend + offset
ntend = reaper.TimeMap_QNToTime(nbend)
reaper.GetSet_LoopTimeRange(true,true,tstart,ntend,true)
time_sel_add_1_beat.lua
tstart,tend = reaper.GetSet_LoopTimeRange(false,false,0,0,0)
bstart = reaper.TimeMap_timeToQN(tstart)
bend = reaper.TimeMap_timeToQN(tend)
nbend = bend + 1.0
ntend = reaper.TimeMap_QNToTime(nbend)
reaper.GetSet_LoopTimeRange(true,true,tstart,ntend,true)
time_sel_double.lua
tstart,tend = reaper.GetSet_LoopTimeRange(false,false,0,0,0)
bstart = reaper.TimeMap_timeToQN(tstart)
bend = reaper.TimeMap_timeToQN(tend)
blen = bend - bstart
nbend = bstart + 2 * blen
ntend = reaper.TimeMap_QNToTime(nbend)
reaper.GetSet_LoopTimeRange(true,true,tstart,ntend,true)
time_sel_half.lua
tstart,tend = reaper.GetSet_LoopTimeRange(false,false,0,0,0)
bstart = reaper.TimeMap_timeToQN(tstart)
bend = reaper.TimeMap_timeToQN(tend)
blen = bend - bstart
nbend = bstart + blen * 0.5
ntend = reaper.TimeMap_QNToTime(nbend)
reaper.GetSet_LoopTimeRange(true,true,tstart,ntend,true)
time_sel_left_1_bar.lua
tstart,tend = reaper.GetSet_LoopTimeRange(false,false,0,0,0)
num,denom,tempo = reaper.TimeMap_GetTimeSigAtTime(0,tstart)
qn_per_bar = 4.0*num/denom
offset = 1.0*qn_per_bar
bstart = reaper.TimeMap_timeToQN(tstart)
bend = reaper.TimeMap_timeToQN(tend)
nbstart = bstart - offset
nbend = bend - offset
if nbstart >= 0.0 then
ntstart = reaper.TimeMap_QNToTime(nbstart)
ntend = reaper.TimeMap_QNToTime(nbend)
reaper.GetSet_LoopTimeRange(true,true,ntstart,ntend,true)
end
time_sel_left_1_beat.lua
tstart,tend = reaper.GetSet_LoopTimeRange(false,false,0,0,0)
bstart = reaper.TimeMap_timeToQN(tstart)
bend = reaper.TimeMap_timeToQN(tend)
nbstart = bstart - 1.0
nbend = bend - 1.0
if nbstart >= 0.0 then
ntstart = reaper.TimeMap_QNToTime(nbstart)
ntend = reaper.TimeMap_QNToTime(nbend)
reaper.GetSet_LoopTimeRange(true,true,ntstart,ntend,true)
end
time_sel_left_1_sel.lua
tstart,tend = reaper.GetSet_LoopTimeRange(false,false,0,0,0)
bstart = reaper.TimeMap_timeToQN(tstart)
bend = reaper.TimeMap_timeToQN(tend)
blen = bend - bstart
nbstart = bstart - blen
nbend = bend - blen
if nbstart >= 0.0 then
ntstart = reaper.TimeMap_QNToTime(nbstart)
ntend = reaper.TimeMap_QNToTime(nbend)
reaper.GetSet_LoopTimeRange(true,true,ntstart,ntend,true)
end
time_sel_minus_1_bar.lua
tstart,tend = reaper.GetSet_LoopTimeRange(false,false,0,0,0)
num,denom,tempo = reaper.TimeMap_GetTimeSigAtTime(0,tend)
qn_per_bar = 4.0*num/denom
offset = 1.0*qn_per_bar
bstart = reaper.TimeMap_timeToQN(tstart)
bend = reaper.TimeMap_timeToQN(tend)
nbend = bend - offset
if nbend > bstart then
ntend = reaper.TimeMap_QNToTime(nbend)
reaper.GetSet_LoopTimeRange(true,true,tstart,ntend,true)
end
time_sel_minus_1_beat.lua
tstart,tend = reaper.GetSet_LoopTimeRange(false,false,0,0,0)
bstart = reaper.TimeMap_timeToQN(tstart)
bend = reaper.TimeMap_timeToQN(tend)
nbend = bend - 1.0
if nbend > bstart then
ntend = reaper.TimeMap_QNToTime(nbend)
reaper.GetSet_LoopTimeRange(true,true,tstart,ntend,true)
end
time_sel_right_1_bar.lua
tstart,tend = reaper.GetSet_LoopTimeRange(false,false,0,0,0)
num,denom,tempo = reaper.TimeMap_GetTimeSigAtTime(0,tstart)
qn_per_bar = 4.0*num/denom
offset = 1.0*qn_per_bar
bstart = reaper.TimeMap_timeToQN(tstart)
bend = reaper.TimeMap_timeToQN(tend)
nbstart = bstart + offset
nbend = bend + offset
if nbstart >= 0.0 then
ntstart = reaper.TimeMap_QNToTime(nbstart)
ntend = reaper.TimeMap_QNToTime(nbend)
reaper.GetSet_LoopTimeRange(true,true,ntstart,ntend,true)
end
time_sel_right_1_beat.lua
tstart,tend = reaper.GetSet_LoopTimeRange(false,false,0,0,0)
bstart = reaper.TimeMap_timeToQN(tstart)
bend = reaper.TimeMap_timeToQN(tend)
nbstart = bstart + 1.0
nbend = bend + 1.0
if nbstart >= 0.0 then
ntstart = reaper.TimeMap_QNToTime(nbstart)
ntend = reaper.TimeMap_QNToTime(nbend)
reaper.GetSet_LoopTimeRange(true,true,ntstart,ntend,true)
end
time_sel_right_1_sel.lua
tstart,tend = reaper.GetSet_LoopTimeRange(false,false,0,0,0)
bstart = reaper.TimeMap_timeToQN(tstart)
bend = reaper.TimeMap_timeToQN(tend)
blen = bend - bstart
nbstart = bstart + blen
nbend = bend + blen
if nbstart >= 0.0 then
ntstart = reaper.TimeMap_QNToTime(nbstart)
ntend = reaper.TimeMap_QNToTime(nbend)
reaper.GetSet_LoopTimeRange(true,true,ntstart,ntend,true)
end