You are absolutely right about the cost-effectiveness and the challenges of sustaining a project like this.
At this point, OLMS is less of a serious business venture and more of a passion project and an open architecture experiment. The initial business idea largely dissolved when the extreme difficulty of achieving genuinely professional, ultra-low-latency / zero x-run performance was fully realized.
However, the architecture remains fascinating, and we can’t predict what new low-level APIs or hardware tools might emerge in the future that could pair perfectly with this software core.
So, why not keep building it? I’ll see where the journey takes me.
It’s way to early too look into tech details; but if you want, there is…
Example Code
You can do this form the track’s point of view:
track = Session:route_by_name("Track 1") -- get Track 1
assert (track) -- ensure that the track exists
track:input():disconnect_all (nil) -- disconnect all its input ports
track:input():audio(0):connect ("system:capture_10") -- connect first (here, 0 = left) input to the sound-card's 10th audio source.
or like JACK connect/disconnect, globally on engine level. e.g.
audioengine = Session:engine()
_, t = audioengine:get_ports (ARDOUR.DataType("AUDIO"), ARDOUR.PortList()) -- get a list of al Audio ports
for p in t[2]:iter() do -- iterate over all audio ports
print (p:name())
if p:name () == "Track 1/audio_in 1" then
p:connect ("system:capture_10")
end
end
To test, you can urn both in Ardour Menu > Window > Scripting
–
PS. Loading partial state is somewhere on the ToDo list.
Ardour v9.0 includes a feature to set plugin/processor state, leaving everything else as-is.