JACK's new OSS backend for the adventurous

It's still not clear when the next release of JACK (1.9.23) is coming, but it will ship with a completely rewritten FreeBSD audio (OSS API) backend. As a preview and call for testing, a build option was added to the audio/jack port to try out the new backend. Any feedback on this is appreciated, to weed out possible regressions before the release.

How to get it: The option has been added to the main branch (not in quarterly) of the ports tree. Select the SOSSO option and rebuild. A pkg upgrade should detect the changed options and update the jackit package. JACK settings are the same, no need to touch them.

Features:
  • Copes much better with different combinations of JACK period, OSS buffer and latency settings.
  • More precise and reproducible latencies from JACK to sound card out, and from sound card in to JACK.
  • Better recovery from under- and overruns, drift correction.
  • Capable to run with JACK periods < 1ms for low latency use cases.
Background: While the current backend isn't bad at all, it suffers from multiple deficiencies in the OSS API and its FreeBSD implementation. It has to adjust OSS buffer sizes through a badly designed API, cope with blocking waits (poll()) when input and output are on a different pace, and there's no way to tell the exact write() / read() position after under- and overruns.
The new backend uses the sosso library which avoids most of these shortcomings by combining a timing based approach with memory mapped IO. There's a double buffer management in JACK, and a new helper thread to feed the OSS buffers in case JACK's primary thread is busy for too long. This effectively decouples the JACK period from OSS buffer size, no more need to fiddle with that.

Testing: Watch out for
  • General regressions, runtime problems
  • Power draw on laptops
  • Low latency if interested
For latency tuning refer to the FreeBSD JACK notes. With USB audio interfaces I was able to get a roundtrip latency of 6-7ms, on the upper limit of what I would tolerate for e.g. live effects on a guitar. Set buffer_ms to 1ms, a high sample rate to get low latency on the DA/AD converters, and then decrease the JACK period to 1ms.

Thanks for testing!
 
Back
Top