Dup Goto 📝

MoveTimeSelection1

PT2/music/daw/reaper/scripts 11-14 13:12:09
To Pop
279 lines, 762 words, 8022 chars Tuesday 2023-11-14 13:12:09

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