Crate jack[][src]

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.

Structs

AsyncClient

A JACK client that is processing data asynchronously, in real-time.

AudioIn

AudioIn implements the PortSpec trait which, defines an endpoint for JACK. In this case, it is a readable 32 bit floating point buffer for audio.

AudioOut

AudioOut implements the PortSpec 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

A client to interact with a JACK server.

ClientOptions

Option flags for opening a JACK client.

ClientStatus

Status flags for JACK clients.

ClosureProcessHandler

Wrap a closure that can handle the process callback. This is called every time data from ports is available from JACK.

CycleTimes

Internal cycle timing information.

MidiIn

MidiIn implements the PortSpec trait, which defines an endpoint for JACK. In this case, it defines midi input.

MidiIter

Iterate through Midi Messages within a Port<MidiIn>.

MidiOut

MidiOut implements the PortSpec trait, which defines an endpoint for JACK. In this case, it defines a midi output.

MidiWriter

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…

PortFlags

Flags for specifying port options.

ProcessScope

ProcessScope provides information on the client and frame time information within a process callback.

RawMidi

Contains 8bit raw midi information along with a timestamp relative to the process cycle.

RingBuffer

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.

RingBufferReader

Read end of the ring buffer. Can only be used from one thread (can be different from the write thread).

RingBufferWriter

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.

TransportPosition

A structure representing the transport position.

TransportStatePosition

A helper struct encapsulating both TransportState and TransportPosition.

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.

LatencyType

Used by NotificationHandler::latency().

TransportBBTValidationError

An error validating a TransportBBT

TransportState

A representation of transport state.

Traits

NotificationHandler

Specifies callbacks for JACK.

PortSpec

Defines the configuration for a certain port to JACK, ie 32 bit floating audio input, 8 bit raw midi output, etc…

ProcessHandler

Specifies real-time processing.

Functions

error_callback

Get the error callback that was set using set_error_callback. This corresponds to the one set using rust-jack, not JACK itself. None is returned if rust-jack hasn’t set a callback or has reset it to use stderr.

get_time

Return JACK’s current system time in microseconds, using the JACK clock source.

info_callback

Resets the JACK info callback to use stdio. Get the info callback that was set using set_info_callback. This corresponds to the one set using rust-jack, not JACK itself. None is returned if rust-jack hasn’t set a callback or has reset it to use stdout.

reset_error_callback

Restores the JACK info callback to the JACK default, which is to write to stderr.

reset_info_callback

Restores the JACK info callback to the JACK default, which is to write to stdout.

set_error_callback

Set the global JACK info callback. It is recommended to specify a callback that uses the log crate.

set_info_callback

Set the global JACK info callback. It is recommended to specify a callback that uses the log crate.

Type Definitions

Frames

Type used to represent sample frame counts.

PortId

Ports have unique ids. A port registration callback is the only place you ever need to know their value.

Time

Type used to represent the value of free running monotonic clock with units of microseconds.