Launch an external application with LUA

In the scripting section of the Ardour manual (The Ardour Manual - Lua Scripting), it says you can “launch an external application when a track is soloed” What is the best way to launch an external application?

For example I am trying to launch musescore to automatically open an exported midi file, if I do os.execute(mscore) it just crashes Ardour. I did find I was able to run “ls -l” and view the output.

What is the best way to launch a GUI app with LUA or is that not really possible?

1 Like

Oh I didn’t know about this functionality, it would be great if I could select a region and have it bounced and opened in Audacity…

perhaps you’re missing quotes? or have you set mscore variable to the absolute path?

Also I assume you don’t want Ardour’s UI thread to stall until you close the child app, but want to fork a process. Assuming you’re on Linux or macOS try:

os.forkexec ("/bin/sh", "-c", "mscore")

See also https://github.com/Ardour/ardour/blob/master/share/scripts/_system_exec.lua

Thank you for your help on this Robin. To clarify I forgot to put the quotes in when I made the post. (Was on my lunch break when I posted).

I tried out the script from the github page and I got xterm to launch, however when I tried to launch musescore, I see that it spawns the process but GUI never launches.

I have tried both with the same result

	os.forkexec ("/usr/bin/mscore")
-- and

os.forkexec ("/bin/sh", "-c", "mscore")

any thoughts?

Perhaps create a small wrapper script and launch that instead to log if there is an error launching mscore. Something like:

#/bin/sh
exec /usr/bin/mscore 2>&1 >/tmp/debug.mscore

Maybe the issue is that Ardour uses the soundcard… or perhaps some issue with environment (Lua’s forkexec inherits Ardour’s environment, except the LD_LIBRARY_PATH variable).

I got this working:

First create a shell script that starts a cron job that will start musescore with the midi file every minute then have the script pause for 90 seconds then have the script do crontab -r to clear the cronjob so musescore doesn’t keep executing every minute

Something like this:

#mscore.sh
crontab -l | { cat; echo "*/1 * * * *  DISPLAY=:0.0 /usr/bin/mscore ~/mscore.mid"; } | crontab -

sleep 90

crontab -r

Then in Ardour’s LUA interface call the script

os.execute("/bin/sh mscore.sh")

Now all I have to do is use LUA’s file functions to automatically create the script and find a way to pass in the name of the midi region, awesome!

stay tuned, more to come…

This topic was automatically closed 91 days after the last reply. New replies are no longer allowed.