Nice Rust bindings for JACK Audio Connection Kit
Check out the examples
directory for usage.
[dependencies]
jack = "0.6"
[dependencies]
jack = { git = "https://github.com/RustAudio/rust-jack.git" }
For details on which functions from the JACK headers have been implemented, see ffi_completeness.md
.
More high-level, creating clients, creating/reading/writing/connecting ports, audio, and midi are supported.
Missing categories include, JACK threading, synchronous processing, transport and control functionality.
-
libjack
is 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.
Testing is a little awkward to setup since it relies on a JACK server.
$ ./dummy_jack_server.sh
which runs the command
$ jackd -r -ddummy -r44100 -p1024 & # Start the dummy JACK 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.
$ cargo test
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_THREADS
to 1. - Increase the value used by
sleep_on_test
inclient/common.rs
.
Another case is that libjack may be broken on your setup. Try switching between libjack and libjack2 (they have the same API and libjack2 isn't necessarily newer than libjack), or using a different version.
- String lengths in the "C" API include the
NULL
character 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_shutdown
has 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