diff --git a/scripts/send_to_bus.lua b/scripts/send_to_bus.lua new file mode 100644 index 0000000000..a391b13108 --- /dev/null +++ b/scripts/send_to_bus.lua @@ -0,0 +1,43 @@ +ardour { ["type"] = "EditorAction", name = "Send Tracks to Bus", + license = "MIT", + author = "Ardour Team", + description = [[Create a Bus and add aux-sends from all selected tracks]] +} + +function factory () return function () + -- find number of channels to use for the new bus, follow master-bus' inputs + local chn = 2 + local mst = Session:master_out(); + if not mst:isnil() then + chn = mst:n_inputs():n_audio() + end + mst = nil -- explicitly drop reference + + local sel = Editor:get_selection () -- get selection + local tracks = ARDOUR.RouteListPtr() -- create a new list + + -- find selected *tracks*, add to tracks list + for r in sel.tracks:routelist ():iter () do + if r:to_track():isnil() then + goto next + end + tracks:push_back (r) + ::next:: + end + + if tracks:size() > 0 then + local bus = Session:new_audio_route (chn, chn, nil, 1, "", ARDOUR.PresentationInfo.Flag.AudioBus, ARDOUR.PresentationInfo.max_order) + if bus:size () > 0 then + Session:add_internal_sends (bus:front(), ARDOUR.Placement.PostFader, tracks); + end + end +end end + +function icon (params) return function (ctx, width, height, fg) + local txt = Cairo.PangoLayout (ctx, "ArdourMono ".. math.ceil(math.min (width, height) * .5) .. "px") + txt:set_text ("\u{2192}B") -- "->B" + local tw, th = txt:get_pixel_size () + ctx:move_to (.5 * (width - tw), .5 * (height - th)) + ctx:set_source_rgba (ARDOUR.LuaAPI.color_to_rgba (fg)) + txt:show_in_cairo_context (ctx) +end end