summaryrefslogtreecommitdiff
path: root/scripts
diff options
context:
space:
mode:
authorRobin Gareus <robin@gareus.org>2017-08-20 19:15:37 +0200
committerRobin Gareus <robin@gareus.org>2017-08-20 19:15:37 +0200
commit7a05ccb484a36b58b33fa2e3f6de07262ccb45c1 (patch)
treef3287bd1cd423b6157a5339ce5bfe93e7e074a53 /scripts
parentc399954148b9a3c619ed56f14d12836bc0700ceb (diff)
Tweak generic audio-track template
* Demo Factory method producing different functions * Allow to run interactively as Action script
Diffstat (limited to 'scripts')
-rw-r--r--scripts/_route_template_generic_audio.lua99
1 files changed, 72 insertions, 27 deletions
diff --git a/scripts/_route_template_generic_audio.lua b/scripts/_route_template_generic_audio.lua
index a3642bf54d..7dabce8aef 100644
--- a/scripts/_route_template_generic_audio.lua
+++ b/scripts/_route_template_generic_audio.lua
@@ -1,7 +1,7 @@
ardour {
["type"] = "EditorAction",
name = "Generic Audio Track",
- description = [[Example ]]
+ description = [[Add Audio tracks, by default as many as there are physical inputs]]
}
-- If a route_setup function is present in an Editor Action Script
@@ -28,8 +28,9 @@ function route_setup ()
}
end
--- The Script can be used as EditorAction in which case it can
--- optionally provide instantiation parmaters
+-- The Script can be used as EditorAction in which case it *could*
+-- optionally provide instantiation parmaters..
+--[[
function action_params ()
return
{
@@ -37,38 +38,82 @@ function action_params ()
["name"] = { title = "Track Name Prefix", default = "Audio" },
}
end
+--]]
-function factory (params) return function ()
- -- When called from the AddRouteDialog, 'params' will be a table with
- -- keys as described in route_setup() above.
+function factory (p)
+ -- when used from the AddRouteDialog (or w/action_params)
+ if type (p) == 'table' and p['how_many'] ~= nil then
+ return function ()
+ -- When called from the AddRouteDialog, 'p' will be a table with
+ -- keys as described in route_setup() above.
+ local name = p["name"] or 'Audio'
+ local how_many = p["how_many"] or 1
+ local channels = p["channels"] or 1
+ local insert_at = p["insert_at"] or ARDOUR.PresentationInfo.max_order;
+ local group = p["group"] or nil
+ local mode = p["track_mode"] or ARDOUR.TrackMode.Normal
+ local strict_io = p["strict_io"] or false
+ local chan_out = 0
- local p = params or route_setup ()
- local name = p["name"] or 'Audio'
- local how_many = p["how_many"] or 1
- local channels = p["channels"] or 1
- local insert_at = p["insert_at"] or ARDOUR.PresentationInfo.max_order;
- local group = p["group"] or nil
- local mode = p["track_mode"] or ARDOUR.TrackMode.Normal
- local strict_io = p["strict_io"] or false
- local chan_out = 0
+ if ARDOUR.config():get_output_auto_connect() == ARDOUR.AutoConnectOption.AutoConnectMaster then
+ if not Session:master_out():isnil() then
+ chan_out = Session:master_out():n_inputs ():n_audio ()
+ end
+ end
- if ARDOUR.config():get_output_auto_connect() == ARDOUR.AutoConnectOption.AutoConnectMaster then
- if not Session:master_out():isnil() then
- chan_out = Session:master_out():n_inputs ():n_audio ()
+ if chan_out == 0 then
+ chan_out = channels;
+ end
+
+ local tl = Session:new_audio_track (channels, chan_out, group, how_many, name, insert_at, mode)
+
+ if strict_io then
+ for t in tl:iter() do
+ t:set_strict_io (true)
+ end
+ end
end
end
+ -- when used as standalone (no action parameters): interactive
+ return function ()
+ local e = Session:engine()
+ local _, t = e:get_backend_ports ("", ARDOUR.DataType("audio"), ARDOUR.PortFlags.IsOutput | ARDOUR.PortFlags.IsPhysical, C.StringVector())
+ local tracks = t[4]:size();
- if chan_out == 0 then
- chan_out = channels;
- end
+ local dialog_options = {
+ { type = "number", key = "tracks", title = "Create Tracks", min = 1, max = 128, step = 1, digits = 0, default = tracks },
+ { type = "entry", key = "name", default = 'Audio', title = "Name Prefix" },
+ { type = "checkbox", key = "stereo", default = false, title = "Stereo" },
+ { type = "checkbox", key = "recarm", default = false, title = "Record Arm Tracks" },
+ }
- local tl = Session:new_audio_track (channels, chan_out, group, how_many, name, insert_at, mode)
+ local dlg = LuaDialog.Dialog ("Create Audio Tracks", dialog_options)
+ local rv = dlg:run()
+ if (not rv or rv['tracks'] == 0) then
+ return
+ end
+
+ local chan_in = stereo and 2 or 1
+ local chan_out = 0
- if strict_io then
- for t in tl:iter() do
- t:set_strict_io (true)
+ if ARDOUR.config():get_output_auto_connect() == ARDOUR.AutoConnectOption.AutoConnectMaster then
+ if not Session:master_out():isnil() then
+ chan_out = Session:master_out():n_inputs ():n_audio ()
+ end
end
- end
-end end
+ if chan_out == 0 then
+ chan_out = chan_in;
+ end
+
+ -- create tracks
+ local tl = Session:new_audio_track (chan_in, chan_out, nil, rv['tracks'], "", ARDOUR.PresentationInfo.max_order, ARDOUR.TrackMode.Normal)
+ -- and optionally record-arm them
+ if rv['recarm'] then
+ for track in tl:iter() do
+ track:rec_enable_control ():set_value (1, PBD.GroupControlDisposition.NoGroup)
+ end
+ end
+ end
+end