diff options
author | Robin Gareus <robin@gareus.org> | 2020-04-22 21:40:46 +0200 |
---|---|---|
committer | Robin Gareus <robin@gareus.org> | 2020-04-22 21:40:46 +0200 |
commit | 1e57175471a87c528b8fcd3d078f34f98369ac76 (patch) | |
tree | 397fd8d9d3ea142ee2cfaf688bca66c658559f3a /share | |
parent | fcfaa0ac49a01f032031c8cd624a4544eb9b63a8 (diff) |
Example Lua script to add plugins and sends
Diffstat (limited to 'share')
-rw-r--r-- | share/scripts/_channelstrip.lua | 134 |
1 files changed, 134 insertions, 0 deletions
diff --git a/share/scripts/_channelstrip.lua b/share/scripts/_channelstrip.lua new file mode 100644 index 0000000000..3d1572069a --- /dev/null +++ b/share/scripts/_channelstrip.lua @@ -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 |