diff options
author | Robin Gareus <robin@gareus.org> | 2016-04-10 20:57:24 +0200 |
---|---|---|
committer | Robin Gareus <robin@gareus.org> | 2016-04-10 20:57:24 +0200 |
commit | c76ef648703128e0b1dbcbc0790daa25254a1ce4 (patch) | |
tree | 8858cf422cd30b84097467c5ef9d37ed5f068080 | |
parent | 2b943ea36c128819d808087f853977fdd8e5c09d (diff) |
some more example lua scripts
-rw-r--r-- | scripts/s_fader_automation.lua | 56 | ||||
-rw-r--r-- | scripts/s_plugin_automation.lua | 35 | ||||
-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 |