Hardour + web UI

Continuing the discussion from Looking for pared-down, headless Ardour daemon:

I was looking for a headless Ardour and just got caught up on the above topic. It looks Iike /headless is included in the build scripts, but I can’t tell if hardour (or hardev) is available in the pre-built binaries - @x42 it sounds like you were considering doing this, but i’m not seeing anything in my recent 6.3 install. Any pointers here? Is a custom src build still the only way to use run hardour?

Assuming I get hardour up and running, my plan is to use it as a “cloud mixer + effects host” by patching outputs from another jack client as inputs to hardour, controlling the mix+effects with the new websocket interface, and patching the hardour outputs back to the same jack client - do you foresee any issues with this plan…? I’m still new to the linux / jack audio world :slight_smile:

Consider me another monthly subscriber btw - really appreciate this awesome project!

Cheers,
Kyle

Should work just fine.

But not, we don’t install the headless version in a regular way, and it’s not part of the normal releases. So you will have to build it from source at this time, at least.

1 Like

We’ve opted to instead distribute a Lua script shell.

The equivalent of the headless tool would be the following script:

#!/opt/Ardour-6.3.0/bin/ardour6-lua
if #arg < 2 then return end             -- require 2 parameters
AudioEngine:set_backend("JACK", "", "") -- connect to JACK
s = load_session (arg[1], arg[2])       -- load the session
assert (s)                              -- bail out if the session fails to load
ARDOUR.LuaAPI.usleep (-1)               -- wait forever 

and then interact with it using some previously enabled remote-control (e.g. OSC or websocket).

You can also run it interactively, which allows you to load different sessions, and perform perform pretty much any action or edit operation from the commandline:

run /opt/Ardour-6.3.0/bin/ardour6-lua, and keep typing…

AudioEngine:set_backend("JACK", "", "")
s = load_session ("/path/to/MySession", "MySession")
s:goto_start()
s:request_transport_speed (1.0, true, ARDOUR.TransportRequestSource.TRS_UI)
close_session ()

There are example scripts at https://github.com/Ardour/ardour/tree/master/share/scripts

1 Like

Thanks guys, Arlua looks really powerful - couple of follow up questions, if you don’t mind.

You say “equivalent”, but to be clear /opt/Ardour-6.3.0/bin/ardour6-lua isn’t actually leveraging hardour behind the scenes for reduced memory + cpu load? I’m curious what exactly the differences are (mainly w/ regard to compute resources) in each operating mode - ie Ardour6, Arlua, Hardour(built from source for now)?

The first script is equivalent in the way that it is a drop-in replacement (identical behavior, same commandline parameters). Also behind the scenes, effectively the same C++ is executed.

The performance differences between the hardour and arlua tools in also negligible (if there is any measurable difference at all). Both tools are very simple C++ frontends to libardour.
The CPU and RAM usage is defined by the session that you load.

Now, using the GUI instead will increase CPU and RAM requirements (waveforms are drawn, level meters for the mixer window updated, etc).

1 Like