Lua bind MonitorProcessor
[ardour.git] / scripts / s_fader_automation.lua
index e1ee2876e4e263043e49cbda7d7ff27462b8672b..aaac7adfe946fb25a070a7d00f930ad5e486af79 100644 (file)
@@ -1,46 +1,53 @@
-ardour { ["type"] = "Snippet", name = "fader automation" }
+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()
+       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)
+       -- iterate over selected tracks
+       for r in rl:iter () do
+               local ac = r:amp ():gain_control () -- ARDOUR:AutomationControl
+               local al = ac:alist () -- ARDOUR:AutomationList (state, high-level)
+               local cl = al:list ()  -- Evoral:ControlList (actual events)
 
-               if cl:isnil() then
+               if cl:isnil () then
                        goto out
                end
 
+               -- set automation state to "Touch"
+               ac:set_automation_state (ARDOUR.AutoState.Touch)
+
                -- query the value at the playhead position
-               local g = cl:eval(playhead)
+               local g = cl:eval (playhead)
 
                -- get state for undo
-               local before = acl:get_state()
+               local before = al:get_state ()
 
                -- delete all events after the playhead...
                cl:truncate_end (playhead)
+
                -- ...and generate some new ones.
                for i=0,50 do
+                       -- use a sqrt fade-out (the shape is recognizable, and otherwise
+                       -- not be possible to achieve with existing ardour fade shapes)
                        cl:add (playhead + i * samplerate / 50,
-                                g * (1 - math.sqrt (i / 50)),
-                                false, true)
+                               g * (1 - math.sqrt (i / 50)),
+                               false, true)
                end
+
                -- remove dense events
-               cl:thin(20)
+               cl:thin (20)
 
                -- save undo
-               local after = acl:get_state()
-               Session:add_command (acl:memento_command(before, after))
+               local after = al:get_state ()
+               Session:add_command (al:memento_command (before, after))
                add_undo = true
 
                ::out::