Alan --
The issues with using Jack are that people need to install, configure, launch, and connect it. There's a substantial ecosystem of programs to help you with these tasks, but I find them inconsistently helpful.
There are two versions, jack1 and jack2, in the repos and portaudio packages have been mistakenly configured to depend on jack1 rather than either for years. This appears to be fixed in Ubuntu 19.10 running with current and backported packages, but it's been an issue in the past year. It's only an issue if you have reason to insist on jack1 or jack2.
Hah, spoke too soon. The libportaudio2 package is now configured to depend on libjack-jackd2, that is, it speciifies jack2, but the portaudio19-dev package depends on the generic libjack-dev package. So they didn't actually fix the bad dependency, they moved from a broken config that fought with me to a broken config that leaves me in peace. Both jack1 and jack2 use the same API so they should be interchangeable.
The installation of either version of jack pops up a dialog about granting real time configuration. This must be answered yes, but it defaults to no. And then you need to add yourself, and any other jack users, to the "audio" group, and then you need to reboot for the permissions granted to the group to take effect. The command "sudo dpkg-reconfigure -p high jackd" will let you do over the real time configuration without a complete re-install. Logging out and back in used to be enough, but it isn't enough any more.
The lack of real time configuration turns up as complaints about inability to lock memory, inability to get realtime, and inability to bridge the Alsa MIDI into jack.
Then you need to configure and launch. I launch jack with the command: '/usr/bin/jackd -dalsa -dhw:0 -r48000 -p256 -n2 -Xraw'. That specifies the configuration using Alsa ("-dalsa") as the backend, using the first alsa device ("-dhw:0"), running at 48000 samples/second ("-r48000"), using buffers containing 256 samples ("-p256"), keeping 2 buffers in play ("-n2"), and bridging Alsa raw midi devices ("-Xraw"). Messages from the server will be printed to the standard output of jackd. The possible digits after "-dhw:" can be found with the command "cat /proc/asound/cards". The possible values for "-p" are all powers of two, the smaller the less latency, but you need to test to decide what works. Leave it off and I believe you get "-p1024 -n2", you can see the values used in the standard output of jackd. It used to be that "-n3" was recommended for usb audio. You could alternatively configure and launch using the jack_control command, or by using qjackctl, or by several other jack racks or session managers or whatever.
And finally you need to connect. The command "jack_lsp" will list the ports active in your jack server and a variety of properties of the ports. The commands 'jack_connect' and 'jack_disconnect' will allow you to connect/disconnect ports. Again, you can find many other programs to help you connect jack ports together.
Qjackctl is very much the swiss army knife of jack. I've had many good experiences with it. But I had to give up trying to read a connection graph the other day because it was illegible as drawn. And the qjackctl patchbay uses the same illegible bipartite graph representation, but introduces a whole new naming convention for ports, the rationale of which has escaped me for months. So I am trying to eliminate the need for qjackctl in my work flow, but I still relapse pretty frequentlly.
So much aggravation! Why bother? Because when you're done you have an audio sample and event bus which solves all the hard problems of generating realtime audio in response to realtime events and of diagnosing which parts of your realtime audio processing chain are slacking off the pace. And this works on resource limited machines, to the extent possible, so if you want to tailor your realtime chain to run on a weak RaspPi, you can build it up under jack and discover exactly what the processor can support.
But John is right, it's way non-obvious and hard to configure. It's not a sound interface, it's a realtime audio sample and event bus.
-- rec -- ad5dz --