Item under cursor - next take - osc: initial commit
This commit is contained in:
parent
f562f6cef5
commit
e996d670e7
@ -0,0 +1,93 @@
|
||||
-- Reaper Script that switches the item under the edit cursor, on the specified track to
|
||||
-- the next (or previous) take. To specify the track, this script MUST be called by a
|
||||
-- OSC message defined as a shortcut for this script in the action list.
|
||||
-- The OSC message must carry a float value as data which is the track (zero based)
|
||||
-- divided by 100 e.g. 0.42 stands for track number 43 (or with osc_first_track_nr = 1
|
||||
-- it may stand for track number 42)
|
||||
-- Features:
|
||||
-- - stores selected tracks and items before execution and restores them afterwards
|
||||
-- - saves only one consolidated undo point
|
||||
-- Requires
|
||||
-- - Reaper 5 or 6
|
||||
-- - SWS extensions must be installed (http://standingwaterstudios.com/)
|
||||
-- - can only be used by a special OSC message, not by keyboard shortcut or "action" OSC message
|
||||
-- Author: Ludwig Frühschütz
|
||||
-- Source: https://www.eleton-audio.de
|
||||
-- Git: https://files.eleton-audio.de/gitea/Ludwig/Reaper-Scripts.git
|
||||
-- License: GPL v3.0
|
||||
|
||||
-- Settings that may be edited:
|
||||
local osc_first_track_nr = 0 -- specify if OSC track numbers are zero based (= 0) or one based (= 1)
|
||||
local select_next_take = true -- select if the script switches to next take (= true) of previous take (= false)
|
||||
|
||||
-- some variables...
|
||||
local init_sel_tracks = {}
|
||||
local init_sel_items = {}
|
||||
local tracknr = 0
|
||||
local osc_tracknr = -1
|
||||
local osc_resolution = 1
|
||||
|
||||
-- Send a message to the console
|
||||
function msg(m)
|
||||
reaper.ShowConsoleMsg(tostring(m) .. "\n")
|
||||
end
|
||||
|
||||
-- Round number
|
||||
function round(num, numDecimalPlaces)
|
||||
local mult = 10^(numDecimalPlaces or 0)
|
||||
return math.floor(num * mult + 0.5) / mult
|
||||
end
|
||||
|
||||
-- START HERE
|
||||
-- check if SWS extensions are present, otherwise quit
|
||||
if reaper.NamedCommandLookup('_SWS_ABOUT') <= 0 then
|
||||
msg('Item under cursor - next take script:')
|
||||
msg('SWS extensions missing, please install them first!')
|
||||
return
|
||||
end
|
||||
|
||||
-- Get track number from osc message that triggered this script. If not specified, quit.
|
||||
_, _, _, _, _, osc_resolution, osc_tracknr = reaper.get_action_context()
|
||||
if osc_tracknr < 0 then
|
||||
msg('Item under cursor - next take script:')
|
||||
msg('No valid track number specified or script not triggered by OSC message!')
|
||||
return
|
||||
end
|
||||
tracknr = round((osc_tracknr / osc_resolution) * 100, 0) - osc_first_track_nr
|
||||
-- Quit if there is no track with the specified number
|
||||
if tracknr >= reaper.CountTracks(0) then -- note: tracknr is zero-based!
|
||||
return
|
||||
end
|
||||
|
||||
-- store selected tracks and items before work and begin undo block...
|
||||
reaper.Undo_BeginBlock()
|
||||
for i = 0, reaper.CountSelectedTracks(0)-1 do
|
||||
init_sel_tracks[i+1] = reaper.GetSelectedTrack(0, i)
|
||||
end
|
||||
reaper.Main_OnCommand(40297, 0) -- Unselect all tracks
|
||||
for i = 0, reaper.CountSelectedMediaItems(0)-1 do
|
||||
init_sel_items[i+1] = reaper.GetSelectedMediaItem(0, i)
|
||||
end
|
||||
reaper.Main_OnCommand(40289, 0) -- Unselect all items
|
||||
|
||||
-- Select item on specified track under edit cursor:
|
||||
local track = reaper.GetTrack(0, tracknr) -- Get track object from track number (zero based)
|
||||
reaper.SetTrackSelected(track, true) -- Select track
|
||||
reaper.Main_OnCommand( reaper.NamedCommandLookup('_XENAKIOS_SELITEMSUNDEDCURSELTX'), 0 ) -- select item under edit cursor on selected track
|
||||
-- Switch item to next take or previous take (depending on settings in this file)
|
||||
if select_next_take then
|
||||
reaper.Main_OnCommand(40125, 0) -- Switch item to next take
|
||||
else
|
||||
reaper.Main_OnCommand(40126, 0) -- Switch item to next take
|
||||
end
|
||||
|
||||
-- restore selected tracks and items after work and end undo block
|
||||
reaper.Main_OnCommand(40297, 0) -- Unselect all tracks
|
||||
for _, track in ipairs(init_sel_tracks) do
|
||||
reaper.SetTrackSelected(track, true)
|
||||
end
|
||||
reaper.Main_OnCommand(40289, 0) -- Unselect all items
|
||||
for _, item in ipairs(init_sel_items) do
|
||||
reaper.SetMediaItemSelected(item, true)
|
||||
end
|
||||
reaper.Undo_EndBlock('Changed take for item under cursor (OSC)', 4) -- 4 is a flag for actions concerning items
|
Loading…
x
Reference in New Issue
Block a user