Example Lua script to move regions (insert gaps)
authorRobin Gareus <robin@gareus.org>
Thu, 23 Nov 2017 14:27:29 +0000 (15:27 +0100)
committerRobin Gareus <robin@gareus.org>
Thu, 23 Nov 2017 14:27:29 +0000 (15:27 +0100)
scripts/_insert_region_gaps.lua [new file with mode: 0644]

diff --git a/scripts/_insert_region_gaps.lua b/scripts/_insert_region_gaps.lua
new file mode 100644 (file)
index 0000000..3a7f5ed
--- /dev/null
@@ -0,0 +1,62 @@
+ardour {
+       ["type"]    = "EditorAction",
+       name        = "Insert Gaps",
+       license     = "MIT",
+       author      = "Ardour Team",
+       description = [[Insert gaps between all regions on selected tracks]]
+}
+
+function action_params ()
+       return
+       {
+               ["gap"] = { title = "Gap size (in sec)", default = "2" },
+       }
+end
+
+function factory () return function ()
+       -- get configuration
+       local p = params or {}
+       local gap = p["gap"] or 2
+       if gap <= 0 then gap = 2 end
+
+       local sel = Editor:get_selection () -- get current selection
+
+       local add_undo = false -- keep track of changes
+       Session:begin_reversible_command ("Insert Gaps")
+
+       -- iterate over all selected tracks
+       for route in sel.tracks:routelist ():iter () do
+               local track = route:to_track ()
+               if track:isnil () then goto continue end
+
+               -- get track's playlist
+               local playlist = track:playlist ()
+               local offset = 0
+
+               -- iterate over all regions in the playlist
+               for region in playlist:region_list():iter() do
+
+                       -- preare for undo operation
+                       region:to_stateful ():clear_changes ()
+
+                       -- move region
+                       region:set_position (region:position() + offset, 0)
+                       offset = offset + Session:nominal_sample_rate () * gap
+
+                       -- create a diff of the performed work, add it to the session's undo stack
+                       -- and check if it is not empty
+                       if not Session:add_stateful_diff_command (region:to_statefuldestructible ()):empty () then
+                               add_undo = true
+                       end
+               end
+               ::continue::
+       end
+
+       -- all done, commit the combined Undo Operation
+       if add_undo then
+               -- the 'nil' Command here mean to use the collected diffs added above
+               Session:commit_reversible_command (nil)
+       else
+               Session:abort_reversible_command ()
+       end
+end end