summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobin Gareus <robin@gareus.org>2016-04-10 20:57:24 +0200
committerRobin Gareus <robin@gareus.org>2016-04-10 20:57:24 +0200
commitc76ef648703128e0b1dbcbc0790daa25254a1ce4 (patch)
tree8858cf422cd30b84097467c5ef9d37ed5f068080
parent2b943ea36c128819d808087f853977fdd8e5c09d (diff)
some more example lua scripts
-rw-r--r--scripts/s_fader_automation.lua56
-rw-r--r--scripts/s_plugin_automation.lua35
-rw-r--r--scripts/s_tomsloop.lua (renamed from scripts/tomsloop.lua)5
3 files changed, 92 insertions, 4 deletions
diff --git a/scripts/s_fader_automation.lua b/scripts/s_fader_automation.lua
new file mode 100644
index 0000000000..e1ee2876e4
--- /dev/null
+++ b/scripts/s_fader_automation.lua
@@ -0,0 +1,56 @@
+ardour { ["type"] = "Snippet", name = "fader automation" }
+
+function factory () return function ()
+ local playhead = Session:transport_frame ()
+ local samplerate = Session:nominal_frame_rate ()
+
+ -- get selected tracks
+ rl = Editor:get_selection().tracks:routelist()
+ -- prepare undo operation
+ Session:begin_reversible_command ("Fancy Fade Out")
+ local add_undo = false -- keep track if something has changed
+ -- iterate over selected tracks
+ for r in rl:iter() do
+ local ac = r:amp():gain_control() -- ARDOUR:AutomationControl
+ local acl = ac:alist() -- ARDOUR:AutomationControlList (state, high-level)
+ local cl = acl:list() -- Evoral:ControlList (actual events)
+
+ ac:set_automation_state(ARDOUR.AutoState.Touch)
+
+ if cl:isnil() then
+ goto out
+ end
+
+ -- query the value at the playhead position
+ local g = cl:eval(playhead)
+
+ -- get state for undo
+ local before = acl:get_state()
+
+ -- delete all events after the playhead...
+ cl:truncate_end (playhead)
+ -- ...and generate some new ones.
+ for i=0,50 do
+ cl:add (playhead + i * samplerate / 50,
+ g * (1 - math.sqrt (i / 50)),
+ false, true)
+ end
+ -- remove dense events
+ cl:thin(20)
+
+ -- save undo
+ local after = acl:get_state()
+ Session:add_command (acl:memento_command(before, after))
+ add_undo = true
+
+ ::out::
+ end
+
+ -- all done, commit the combined Undo Operation
+ if add_undo then
+ -- the 'nil' Commend here mean to use the collected diffs added above
+ Session:commit_reversible_command (nil)
+ else
+ Session:abort_reversible_command ()
+ end
+end end
diff --git a/scripts/s_plugin_automation.lua b/scripts/s_plugin_automation.lua
new file mode 100644
index 0000000000..e69de6662a
--- /dev/null
+++ b/scripts/s_plugin_automation.lua
@@ -0,0 +1,35 @@
+ardour { ["type"] = "Snippet", name = "plugin automation2" }
+
+function factory () return function ()
+ local playhead = Session:transport_frame ()
+ local samplerate = Session:nominal_frame_rate ()
+
+ local r = Session:route_by_remote_id(3)
+ -- get AutomationControList, ControlList and ParameterDescriptor
+ local acl, cl, pd = ARDOUR.LuaAPI.plugin_automation (r:nth_plugin (0), 0)
+
+ if not acl:isnil() then
+ print ("Parameter Range", pd.lower, pd.upper)
+ print ("Current value", cl:eval(playhead))
+
+ -- prepare undo operation
+ Session:begin_reversible_command ("Automatix")
+ local before = acl:get_state()
+
+ -- remove future automation
+ cl:truncate_end (playhead)
+
+ -- add new data points after the playhead 1 sec min..max
+ -- without guard-points, but with initial (..., false, true)
+ for i=0,10 do
+ cl:add (playhead + i * samplerate / 10,
+ pd.lower + math.sqrt (i / 10) * (pd.upper - pd.lower),
+ false, true)
+ end
+
+ -- save undo
+ local after = acl:get_state()
+ Session:add_command (acl:memento_command(before, after))
+ Session:commit_reversible_command (nil)
+ end
+end end
diff --git a/scripts/tomsloop.lua b/scripts/s_tomsloop.lua
index 2a7880111e..77a7b68116 100644
--- a/scripts/tomsloop.lua
+++ b/scripts/s_tomsloop.lua
@@ -24,8 +24,6 @@ function factory () return function ()
local playhead = Session:transport_frame ()
-- make sure we have a loop, and the playhead (edit point) is after it
- -- TODO: only print an error and return
- -- TODO: use the edit-point (not playhead) ? maybe.
if not loop then
print ("A Loop range must be set.")
goto errorout
@@ -58,8 +56,7 @@ function factory () return function ()
-- check if there are any regions in the loop-range of this track
local range = Evoral.Range (loop:start (), loop:_end ())
- if playlist:regions_with_start_within (range):empty ()
- and playlist:regions_with_end_within (range):empty () then
+ if playlist:regions_touched (range):empty () then
goto continue
end