Rust JACK
Nice Rust bindings for JACK Audio Connection Kit
Running
-
libjackis required. Consult your package manager or the official website. -
The general workflow for a JACK application is to start up a JACK daemon and connect the client to it. qjackctl is a convinient way to configure and bring up a JACK server through a GUI.
Running Tests
Testing is a little awkward to setup since it relies on a JACK server.
Setting Up JACK Dummy Server
Testing expects there to be an available JACK server running at a sample rate of 44.1kHz and a buffer size of 1024 samples.
& # Start the dummy JACK server
Possible Issues
If the tests are failing, a possible gotcha may be timing issues.
- Rust runs tests in parallel, it may be possible that the JACK server is not keeping up. Set the environment variable
RUST_TEST_THREADSto 1. - Increase the value of
DEFAULT_SLEEP_TIMEintest.rs.
Another case can be that libjack is broke. Try switching between libjack and libjack2 (they have the same API and libjack2 isn't necessarily newer than libjack), or using a different version.
Running the tests
"C" & Rust API differences
- String lengths in the "C" API include the
NULLcharacter while these Rust bindings do not. generallyrust_size(x) = c_size(x) - 1. - "C" bindings require functions to be registered while Rust bindings register an object with a trait.
jack_on_shutdownhas been removed, uses onlyjack_on_info_shutdown.- Rust enums vs C enums
- Rust bitflags vs C integers used as flags
- deprecated Jack functions are not used/implemented in Rust bindings
Progress
Sections based on the main page sections on the Jack API.
TODO
- Top priority: MIDI!!!
- Managing and determining latency
- Transport and Timebase control
- The non-callback API (possibly skip)
- Reading and writing MIDI data
- Session API for clients.
- managing support for newer/older versions of JACK
- the API for starting and controlling a JACK server
-
- Metadata API.
Other TODOS
- make safer
- better error reporting
- better testing