2021-05-04 12:18:04 -04:00
|
|
|
ardour { ["type"] = "Snippet", name = "Set Region Gain Curve" }
|
|
|
|
|
|
|
|
function factory () return function ()
|
|
|
|
-- get Editor GUI Selection
|
|
|
|
-- http://manual.ardour.org/lua-scripting/class_reference/#ArdourUI:Selection
|
|
|
|
local sel = Editor:get_selection ()
|
|
|
|
|
|
|
|
-- prepare undo operation
|
|
|
|
Session:begin_reversible_command ("Lua Region Gain Curve")
|
|
|
|
|
|
|
|
-- iterate over selected regions
|
|
|
|
-- http://manual.ardour.org/lua-scripting/class_reference/#ArdourUI:RegionSelection
|
|
|
|
for r in sel.regions:regionlist ():iter () do
|
|
|
|
|
|
|
|
-- test if it's an audio region
|
|
|
|
local ar = r:to_audioregion ();
|
|
|
|
if ar:isnil () then
|
|
|
|
goto next
|
|
|
|
end
|
|
|
|
|
|
|
|
-- get region-gain-curve is-a
|
|
|
|
-- http://manual.ardour.org/lua-scripting/class_reference/#ARDOUR:AutomationList
|
|
|
|
local al = ar:envelope ()
|
|
|
|
|
|
|
|
-- get state for undo
|
|
|
|
local before = al:get_state ()
|
|
|
|
|
|
|
|
-- delete all current events
|
|
|
|
al:clear_list ()
|
|
|
|
|
|
|
|
-- add some new ones
|
|
|
|
for i=0,50 do
|
2022-09-27 12:58:53 -04:00
|
|
|
al:add (r:length ():scale (Temporal:ratio (i, 50)),
|
2021-05-04 12:18:04 -04:00
|
|
|
1 - math.sqrt (i / 50),
|
|
|
|
false, true)
|
|
|
|
end
|
|
|
|
|
|
|
|
-- remove dense events
|
|
|
|
al:thin (20)
|
|
|
|
|
|
|
|
-- save undo
|
|
|
|
local after = al:get_state ()
|
|
|
|
Session:add_command (al:memento_command (before, after))
|
|
|
|
|
|
|
|
::next::
|
|
|
|
end
|
|
|
|
|
|
|
|
if not Session:abort_empty_reversible_command () then
|
|
|
|
Session:commit_reversible_command (nil)
|
|
|
|
end
|
|
|
|
|
|
|
|
end end
|