Example Lua script to add plugins and sends
This commit is contained in:
parent
fcfaa0ac49
commit
1e57175471
134
share/scripts/_channelstrip.lua
Normal file
134
share/scripts/_channelstrip.lua
Normal file
@ -0,0 +1,134 @@
|
||||
ardour {
|
||||
["type"] = "EditorAction",
|
||||
name = "Channel Strip Setup",
|
||||
license = "MIT",
|
||||
author = "Ardour Team",
|
||||
description = [[Add Compressor and EQ plugin to every selected track and if a bus name 'Reverb' exists post-fader reverb send]]
|
||||
}
|
||||
|
||||
function factory (params)
|
||||
return function ()
|
||||
-- helper functions
|
||||
function plugin_uri (proc)
|
||||
return proc:to_plugininsert():plugin(0):get_info().unique_id
|
||||
end
|
||||
function add_lv2_plugin (route, pluginname, position)
|
||||
local p = ARDOUR.LuaAPI.new_plugin (Session, pluginname, ARDOUR.PluginType.LV2, "")
|
||||
if not p:isnil () then
|
||||
route:add_processor_by_index (p, position, nil, true)
|
||||
end
|
||||
end
|
||||
function test_send_dest (send, route)
|
||||
local intsend = send:to_internalsend()
|
||||
if intsend:isnil () then return false end
|
||||
return intsend:target_route () == route
|
||||
end
|
||||
|
||||
-- Test if there is a Bus named "Reverb"
|
||||
local reverb_bus = Session:route_by_name ("Reverb")
|
||||
if reverb_bus:isnil () or not reverb_bus:to_track ():isnil () then
|
||||
reverb_bus = nil;
|
||||
end
|
||||
|
||||
-- Iterate over all selected Track/Bus
|
||||
-- http://manual.ardour.org/lua-scripting/class_reference/#ArdourUI:TrackSelection
|
||||
local sel = Editor:get_selection ()
|
||||
for route in sel.tracks:routelist ():iter () do
|
||||
local have_eq = false
|
||||
local comp_pos = 0
|
||||
local add_send = false
|
||||
|
||||
-- skip master-bus
|
||||
if route:is_master() then goto next end
|
||||
|
||||
-- iterate over all plugins on the route,
|
||||
-- check if a a-eq or a-comp is already present
|
||||
local i = 0;
|
||||
repeat
|
||||
local proc = route:nth_plugin (i) -- get Nth Ardour::Processor
|
||||
if (not proc:isnil()) and plugin_uri (proc) == "urn:ardour:a-eq" then
|
||||
have_eq = true;
|
||||
end
|
||||
if (not proc:isnil()) and (plugin_uri (proc) == "urn:ardour:a-comp" or plugin_uri (proc) == "urn:ardour:a-comp#stereo") then
|
||||
comp_pos = i + 1; -- remember position of compressor
|
||||
end
|
||||
i = i + 1
|
||||
until proc:isnil()
|
||||
|
||||
-- check if there is a send to the reverb bus
|
||||
if reverb_bus then
|
||||
add_send = true;
|
||||
i = 0;
|
||||
repeat
|
||||
local send = route:nth_send (i) -- get Nth Ardour::Send
|
||||
if not send:isnil() and test_send_dest (send, reverb_bus) then
|
||||
add_send = false
|
||||
end
|
||||
i = i + 1
|
||||
until send:isnil()
|
||||
end
|
||||
|
||||
-- plugins are inserted at the top (pos = 0).
|
||||
-- So they have to be added in reverse order:
|
||||
-- If the compressor is not yet present (comp_pos == 0),
|
||||
-- first add the EQ, and then the compressor before the EQ.
|
||||
-- Otherwise add the EQ after the compressor.
|
||||
if not have_eq then
|
||||
add_lv2_plugin (route, "urn:ardour:a-eq", comp_pos)
|
||||
end
|
||||
|
||||
if comp_pos == 0 then
|
||||
if route:n_inputs ():n_audio () == 2 then
|
||||
add_lv2_plugin (route, "urn:ardour:a-comp#stereo", 0)
|
||||
else
|
||||
add_lv2_plugin (route, "urn:ardour:a-comp", 0)
|
||||
end
|
||||
end
|
||||
|
||||
--add send to reverb bus, post-fader, just before the track's mains output.
|
||||
if add_send then
|
||||
Session:add_internal_send (reverb_bus, route:main_outs (), route)
|
||||
end
|
||||
|
||||
::next::
|
||||
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function icon (params) return function (ctx, width, height, fg)
|
||||
function rnd (x) return math.floor (x + 0.5) end
|
||||
|
||||
local wc = rnd (width * 0.5) - 0.5
|
||||
local wl = wc - math.floor (width * .25)
|
||||
local wr = wc + math.floor (width * .25)
|
||||
|
||||
local h0 = height * 0.2
|
||||
local h1 = height * 0.8
|
||||
|
||||
local fw = math.floor (width * .1)
|
||||
local fl = rnd (height * .35) - 1
|
||||
local fc = rnd (height * .65) - 1
|
||||
local fr = rnd (height * .45) - 1
|
||||
|
||||
ctx:set_source_rgba (ARDOUR.LuaAPI.color_to_rgba (fg))
|
||||
ctx:set_line_width (1)
|
||||
|
||||
ctx:move_to (wl, h0)
|
||||
ctx:line_to (wl, h1)
|
||||
ctx:move_to (wc, h0)
|
||||
ctx:line_to (wc, h1)
|
||||
ctx:move_to (wr, h0)
|
||||
ctx:line_to (wr, h1)
|
||||
ctx:stroke ()
|
||||
|
||||
ctx:set_line_width (2)
|
||||
|
||||
ctx:move_to (wl - fw, fl)
|
||||
ctx:line_to (wl + fw, fl)
|
||||
ctx:move_to (wc - fw, fc)
|
||||
ctx:line_to (wc + fw, fc)
|
||||
ctx:move_to (wr - fw, fr)
|
||||
ctx:line_to (wr + fw, fr)
|
||||
ctx:stroke ()
|
||||
end end
|
Loading…
Reference in New Issue
Block a user