Expand description
Rust bindings for JACK, a real-time audio and midi library.
§Server
JACK provides a high priority server to manipulate audio and midi across applications. The rust
jack crate does not provide server creation functionality, so a server has to be set up with the
jackd
commandline tool, qjackctl
the gui tool, or another method.
§Client
Typically, applications connect clients to the server. For the rust jack crate, a connection can
be made with client::Client::new
, which returns a client::Client
.
The Client
can query the server for information, register ports, and manage connections for
ports.
To commence processing audio/midi and other information in real-time, rust jack provides the
Client::activate_async
, which consumes the Client
, an object that implements
NotificationHandler
and an object that implements ProcessHandler
and returns a
AsyncClient
. AsyncClient
processes the data in real-time with the provided handlers.
§Port
A Client
may obtain port information through the Client::port_by_id
and
Client::port_by_name
methods. These ports can be used to manage connections or to obtain port
metadata, though their port data (audio buffers and midi buffers) cannot be accessed safely.
Ports can be registered with the Client::register_port
method. This requires a PortSpec
. The
jack crate comes with common specs such as AudioIn
, AudioOut
, MidiIn
, and
MidiOut
.
To access the data of registered ports, use their specialized methods within a ProcessHandler
callback. For example, Port<AudioIn>::as_mut_slice
returns a audio buffer that can be written
to.
Re-exports§
pub use crate::client::CLIENT_NAME_SIZE;
pub use crate::client::CLIENT_NAME_SIZE;
pub use crate::port::PORT_NAME_SIZE;
pub use crate::port::PORT_NAME_SIZE;
pub use crate::port::PORT_TYPE_SIZE;
pub use crate::port::PORT_TYPE_SIZE;
pub use jack_sys;
Modules§
- contrib
- A collection of useful but optional functionality.
Structs§
- Async
Client - A JACK client that is processing data asynchronously, in real-time.
- AudioIn
AudioIn
implements thePortSpec
trait which, defines an endpoint for JACK. In this case, it is a readable 32 bit floating point buffer for audio.- Audio
Out AudioOut
implements thePortSpec
trait, which defines an endpoint for JACK. In this case, it is a mutable 32 bit floating point buffer for audio.- CLIENT_
NAME_ SIZE - The maximum string length for port names.
- Client
- Client
Options - Option flags for opening a JACK client.
- Client
Status - Status flags for JACK clients.
- Closure
Property Change Handler - Wrap a closure that chan handle a
property_changed
callback. This is called for every property that changes. - Cycle
Times - Internal cycle timing information.
- MidiIn
MidiIn
implements thePortSpec
trait, which defines an endpoint for JACK. In this case, it defines midi input.- Midi
Iter - Iterate through Midi Messages within a
Port<MidiIn>
. - MidiOut
MidiOut
implements thePortSpec
trait, which defines an endpoint for JACK. In this case, it defines a midi output.- Midi
Writer - Write midi events to an output midi port.
- PORT_
NAME_ SIZE - The maximum string length for port names.
- PORT_
TYPE_ SIZE - The maximum string length for jack type names.
- Port
- An endpoint to interact with JACK data streams, for audio, midi, etc…
- Port
Flags - Flags for specifying port options.
- Process
Scope ProcessScope
provides information on the client and frame time information within a process callback.- Property
- A piece of Metadata on a Jack
subject
: either a port or a client. - RawMidi
- Contains 8bit raw midi information along with a timestamp relative to the process cycle.
- Ring
Buffer - A lock-free ringbuffer. The key attribute of a ringbuffer is that it can be safely accessed by two threads simultaneously, one reading from the buffer and the other writing to it - without using any synchronization or mutual exclusion primitives. For this to work correctly, there can only be a single reader and a single writer thread. Their identities cannot be interchanged.
- Ring
Buffer Reader - Read end of the ring buffer. Can only be used from one thread (can be different from the write thread).
- Ring
Buffer Writer - Write end of the ring buffer. Can only be used from one thread (can be a different from the read thread).
- Transport
- A structure for querying and manipulating the JACK transport.
- TransportBBT
- Transport Bar Beat Tick data.
- Transport
Position - A structure representing the transport position.
- Transport
State Position - A helper struct encapsulating both
TransportState
andTransportPosition
. - Unowned
PortSpec
for a port that holds has no readable or writeable data from JACK on the created client. It can be used to connect ports or to obtain metadata.
Enums§
- Control
- Specify an option, either to continue processing, or to stop.
- Error
- An error that can occur in JACK.
- Latency
Type - Logger
Type - Describes how JACK should log info and error messages.
- Property
Change - A description of a Metadata change describint a creation, change or deletion, its owner
subject
andkey
. - Property
Change Owned - A helper enum, allowing for sending changes between threads.
- TransportBBT
Validation Error - An error validating a TransportBBT
- Transport
State - A representation of transport state.
Traits§
- Notification
Handler - Specifies callbacks for JACK.
- Port
Spec - Defines the configuration for a certain port to JACK, ie 32 bit floating audio input, 8 bit raw midi output, etc…
- Process
Handler - Specifies real-time processing.
- Property
Change Handler - A trait for reacting to property changes.
Functions§
- get_
time Deprecated - Return JACK’s current system time in microseconds, using the JACK clock source.
- set_
logger - Set the logger.
Type Aliases§
- Closure
Process Handler Deprecated - Wrap a closure that can handle the
process
callback. This is called every time data from ports is available from JACK. - Frames
- Type used to represent sample frame counts.
- Internal
ClientID - A client to interact with a JACK server.
- PortId
- Ports have unique ids. A port registration callback is the only place you ever need to know their value.
- Property
Map - A map of Metadata
key
s, URI Strings, toProperty
s, value and optional type Strings, for a given subject. - Time
- Type used to represent the value of free running monotonic clock with units of microseconds.