Jack
Jack
0.98.1
1.1 Introduction
JACK is a low-latency audio server, written for POSIX conformant operating systems
such as GNU/Linux and Apple’s OS X. It can connect several client applications to
an audio device, and allow them to share audio with each other. Clients can run as
separate processes like normal applications, or within the JACK server as "plugins".
JACK was designed from the ground up for professional audio work, and its design
focuses on two key areas: synchronous execution of all clients, and low latency opera-
tion.
See also:
<http://jackit.sourceforge.net>
For programmers with experience of several other audio APIs such as PortAudio, Ap-
ple’s CoreAudio, Steinberg’s VST and ASIO as well as many others, JACK presents
a familiar model: your program provides a "callback" function that will be executed
at the right time. Your callback can send and receive data as well as do other signal
processing tasks. You are not responsible for managing audio interfaces or threading,
and there is no "format negotiation": all audio data within JACK is represented as 32
bit floating point values.
For those with experiences rooted in the Unix world, JACK presents a somewhat un-
familiar API. Most Unix APIs are based on the read/write model spawned by the "ev-
erything is a file" abstraction that Unix is rightly famous for. The problem with this
design is that it fails to take the realtime nature of audio interfaces into account, or
more precisely, it fails to force application developers to pay sufficient attention to this
aspect of their task. In addition, it becomes rather difficult to facilitate inter-application
audio routing when different programs are not all running synchronously.
Using JACK within your program is very simple, and typically consists of just:
• registering a "process callback" which will be called at the right time by the
JACK server.
There is a lot more that you can do with JACK’s interfaces, but for many applications,
this is all that is needed. The simple_client.c example demonstrates a complete (sim-
ple!) JACK application that just copies the signal arriving at its input port to its output
port. Similarly, inprocess.c shows how to write an internal client "plugin" that runs
within the JACK server process.
1.3 Reference
The JACK programming interfaces are described in several header files:
• a metronome.
• a recording client that can capture any number of channels from any JACK
sources and store them as an audio file.
• command line clients to control the transport mechanism, change the buffer size
and more.
• simple examples of wrapping a GUI around a JACK application.
• tools for checking the status of a running JACK system.
1.4 Porting
JACK is designed to be portable to any system supporting the relevant POSIX and
ANSI C standards. It currently runs under GNU/Linux and Mac OS X on several
different processor architectures. If you want to port JACK to another platform, please
read the Porting JACK document.
1.5 License
Copyright (C) 2001-2003 by Paul Davis and others.
JACK is free software; you can redistribute it and/or modify it under the terms of
the GNU GPL and LGPL licenses as published by the Free Software Foundation,
<http://www.gnu.org>. The JACK server uses the GPL, as noted in the source
file headers. However, the JACK library is licensed under the LGPL, allowing propri-
etary programs to link with it and use JACK services. You should have received a copy
of these Licenses along with the program; if not, write to the Free Software Foundation,
Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
This program is distributed in the hope that it will be useful, but WITHOUT ANY
WARRANTY; without even the implied warranty of MERCHANTABILITY or FIT-
NESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
more details.
JACK-AUDIO-CONNECTION-
KIT Data Structure
Index
JACK-AUDIO-CONNECTION-
KIT File
Index
JACK-AUDIO-CONNECTION-
KIT Page
Index
JACK-AUDIO-CONNECTION-
KIT Data Structure
Documentation
Data Fields
• jack_unique_t unique_1
• jack_time_t usecs
• jack_nframes_t frame_rate
• jack_nframes_t frame
• jack_position_bits_t valid
• int32_t bar
• int32_t beat
• int32_t tick
• double bar_start_tick
• float beats_per_bar
• float beat_type
• double ticks_per_beat
• double beats_per_minute
• double frame_time
• double next_time
• int32_t padding [10]
• jack_unique_t unique_2
12 JACK-AUDIO-CONNECTION-KIT Data Structure Documentation
current bar
current beat-within-bar
current tick-within-beat
unique ID
unique ID
monotonic, free-rolling
• transport.h
Data Fields
• char ∗ buf
• size_t len
The documentation for this struct was generated from the following file:
• ringbuffer.h
Data Fields
• char ∗ buf
• volatile size_t write_ptr
• volatile size_t read_ptr
• size_t size
• size_t size_mask
• int mlocked
The documentation for this struct was generated from the following file:
• ringbuffer.h
#include <transport.h>
Data Fields
• jack_nframes_t frame_rate
• jack_time_t usecs
• jack_transport_bits_t valid
• jack_transport_state_t transport_state
• jack_nframes_t frame
• jack_nframes_t loop_start
• jack_nframes_t loop_end
• long smpte_offset
• float smpte_frame_rate
• int bar
• int beat
• int tick
• double bar_start_tick
• float beats_per_bar
• float beat_type
• double ticks_per_beat
• double beats_per_minute
Deprecated
This is for compatibility with the earlier transport interface. Use the jack_-
position_t struct, instead.
monotonic, free-rolling
• transport.h
Data Fields
• jack_port_t ∗ input_port
• jack_port_t ∗ output_port
The documentation for this struct was generated from the following file:
• inprocess.c
JACK-AUDIO-CONNECTION-
KIT File
Documentation
This demonstrates the basic concepts for writing a client that runs within the JACK
server process.
#include <stdlib.h>
#include <stdio.h>
#include <memory.h>
#include <jack/jack.h>
Data Structures
• struct port_pair_t
Functions
This demonstrates the basic concepts for writing a client that runs within the JACK
server process.
For the sake of example, a port_pair_t is allocated in jack_initialize(), passed to inpro-
cess() as an argument, then freed in jack_finish().
Called in the realtime thread on every process cycle. The entry point name was
passed to jack_set_process_callback() from jack_initialize(). Although this is an in-
ternal client, its process() interface is identical to simple_client.c.
Returns:
0 if successful; otherwise jack_finish() will be called and the client terminated
immediately.
This required entry point is called immediately before the client is unloaded, which
could happen due to a call to jack_internal_client_close(), or a nonzero return from
either jack_initialize() or inprocess().
Parameters:
arg the same parameter provided to inprocess().
This required entry point is called after the client is loaded by jack_internal_client_-
new().
Parameters:
client pointer to JACK client structure.
so_data character string passed from jack_internal_client_new().
Returns:
0 if successful; otherwise jack_finish() will be called and the client terminated
immediately.
Functions
• jack_client_t ∗ jack_client_new (const char ∗client_name)
• int jack_client_close (jack_client_t ∗client)
• int jack_client_name_size (void)
• int jack_internal_client_new (const char ∗client_name, const char ∗so_name,
const char ∗so_data)
• void jack_internal_client_close (const char ∗client_name)
• int jack_is_realtime (jack_client_t ∗client)
• void jack_on_shutdown (jack_client_t ∗client, void(∗function)(void ∗arg), void
∗arg)
• int jack_set_process_callback (jack_client_t ∗client, JackProcessCallback
process_callback, void ∗arg)
• int jack_set_thread_init_callback (jack_client_t ∗client, JackThreadInitCallback
thread_init_callback, void ∗arg)
• int jack_set_freewheel_callback (jack_client_t ∗client, JackFreewheelCallback
freewheel_callback, void ∗arg)
• int jack_set_freewheel (jack_client_t ∗client, int onoff)
• int jack_set_buffer_size (jack_client_t ∗client, jack_nframes_t nframes)
• int jack_set_buffer_size_callback (jack_client_t ∗client, JackBufferSizeCallback
bufsize_callback, void ∗arg)
• int jack_set_sample_rate_callback (jack_client_t ∗client, JackSampleRate-
Callback srate_callback, void ∗arg)
• int jack_set_port_registration_callback (jack_client_t ∗, JackPortRegistration-
Callback registration_callback, void ∗arg)
• int jack_set_graph_order_callback (jack_client_t ∗, JackGraphOrderCallback
graph_callback, void ∗)
• int jack_set_xrun_callback (jack_client_t ∗, JackXRunCallback xrun_callback,
void ∗arg)
• int jack_activate (jack_client_t ∗client)
• int jack_deactivate (jack_client_t ∗client)
• jack_port_t ∗ jack_port_register (jack_client_t ∗client, const char ∗port_name,
const char ∗port_type, unsigned long flags, unsigned long buffer_size)
• int jack_port_unregister (jack_client_t ∗, jack_port_t ∗)
• void ∗ jack_port_get_buffer (jack_port_t ∗, jack_nframes_t)
• const char ∗ jack_port_name (const jack_port_t ∗port)
Variables
• void(∗ jack_error_callback )(const char ∗msg)
Tell the Jack server that the program is ready to start processing audio.
Returns:
0 on success, otherwise a non-zero error code
Returns:
0 on success, otherwise a non-zero error code
Returns:
the maximum number of characters in a JACK client name including the final
NULL character. This value is a constant.
Parameters:
client_name of at most jack_client_name_size() characters.
Returns:
Opaque client handle if successful, otherwise NULL.
Note:
Failure generally means that the JACK server is not running. If there was some
other problem, it will be reported via the jack_error_callback mechanism.
Returns:
the pthread ID of the thread running the JACK client side code.
Precondition:
The port types must be identical.
The JackPortFlags of the source_port must include JackPortIsOutput.
The JackPortFlags of the destination_port must include JackPortIsInput.
Returns:
0 on success, EEXIST if the connection is already made, otherwise a non-zero
error code
Returns:
the current CPU load estimated by JACK. This is a running average of the time it
takes to execute a full process cycle for all clients as a percentage of the real time
available per cycle determined by the buffer size and sample rate.
Tell the Jack server to remove this client from the process graph. Also, disconnect all
ports belonging to it, since inactive clients have no port connections.
Returns:
0 on success, otherwise a non-zero error code
Precondition:
The port types must be identical.
The JackPortFlags of the source_port must include JackPortIsOutput.
The JackPortFlags of the destination_port must include JackPortIsInput.
Returns:
0 on success, otherwise a non-zero error code
Old-style interface to become the timebase for the entire JACK subsystem.
Deprecated
This function still exists for compatibility with the earlier transport interface, but
it does nothing. Instead, see transport.h and use jack_set_timebase_callback().
Returns:
ENOSYS, function not implemented.
Returns:
an estimate of the current time in frames. This is a running counter, no significance
should be attached to its value, but it can be compared to a previously returned
value.
Returns:
the time in frames that has passed since the JACK server began the current process
cycle.
Returns:
the current maximum size that will ever be passed to the process_callback. It
should only be used ∗before∗ the client has been activated. This size may change,
clients that depend on it must register a bufsize_callback so they will be notified if
it does.
See also:
jack_set_buffer_size_callback()
Parameters:
port_name_pattern A regular expression used to select ports by name. If NULL
or of zero length, no selection based on name will be carried out.
type_name_pattern A regular expression used to select ports by type. If NULL
or of zero length, no selection based on type will be carried out.
flags A value used to select ports by their flags. If zero, no selection based on
flags will be carried out.
Returns:
a NULL-terminated array of ports that match the specified arguments. The caller
is responsible for calling free(3) any non-NULL returned value.
See also:
jack_port_name_size(), jack_port_type_size()
Returns:
the sample rate of the jack system, as set by the user when jackd was started.
Returns:
0 on success, otherwise a non-zero error code
Parameters:
client_name of at most jack_client_name_size() characters.
so_name A path to a shared object file containing the code for the new client.
so_data An arbitary string containing information to be passed to the jack_-
initialize() routine of the new client.
Parameters:
client pointer to JACK client structure.
Returns:
1 if JACK is running realtime, 0 otherwise
Parameters:
client pointer to JACK client structure.
function The jack_shutdown function pointer.
arg The arguments for the jack_shutdown function.
Register a function (and argument) to be called if and when the JACK server shuts down
the client thread. The function must be written as if it were an asynchonrous POSIX
signal handler — use only async-safe functions, and remember that it is executed from
another thread. A typical function might set a flag or write to a pipe so that the rest of
the application knows that the JACK client thread has shut down.
NOTE: clients do not need to call this. It exists only to help more complex clients
understand what is going on. It should be called before jack_client_activate().
Returns:
address of the jack_port_t of a port_id.
Returns:
address of the jack_port_t named port_name.
See also:
jack_port_name_size()
Returns:
number of connections to or from port.
Precondition:
The calling client must own port.
Returns:
TRUE if the locally-owned port is directly connected to the port_name.
See also:
jack_port_name_size()
Perform the same function as jack_disconnect() using port handles rather than names.
This avoids the name lookup inherent in the name-based version.
Clients connecting their own ports are likely to use this function, while generic con-
nection clients (e.g. patchbays) would use jack_disconnect().
If JackPortCanMonitor is set for a port, this function turns on input monitoring if it was
off, and turns it off if only one request has been made to turn it on. Otherwise it does
nothing.
Returns:
0 on success, otherwise a non-zero error code
Returns:
the JackPortFlags of the jack_port_t.
Returns:
a null-terminated array of full port names to which the port is connected. If none,
returns NULL.
The caller is responsible for calling free(3) on any non-NULL returned value.
This differs from jack_port_get_connections() in two important respects:
1) You may not call this function from code that is executed in response to a JACK
event. For example, you cannot use it in a GraphReordered handler.
2) You need not be the owner of the port to get information about its connections.
See also:
jack_port_name_size()
This returns a pointer to the memory area associated with the specified port. For an
output port, it will be a memory area that can be written to; for an input port, it will
be an area containing the data from the port’s connection(s), or zero-filled. if there are
multiple inbound connections, the data will be mixed appropriately.
FOR OUTPUT PORTS ONLY ——————— You may cache the value returned,
but only between calls to your "blocksize" callback. For this reason alone, you should
either never cache the return value or ensure you have a "blocksize" callback and be
sure to invalidate the cached address from there.
Returns:
a null-terminated array of full port names to which the port is connected. If none,
returns NULL.
The caller is responsible for calling free(3) on any non-NULL returned value.
Parameters:
port locally owned jack_port_t pointer.
See also:
jack_port_name_size(), jack_port_get_all_connections()
Returns:
the time (in frames) between data being available or delivered at/to a port, and the
time at which it arrived at or is delivered to the "other side" of the port. E.g. for a
physical audio output port, this is the time between writing to the port and when
the signal will leave the connector. For a physical audio input port, this is the time
between the sound arriving at the connector and the corresponding frames being
readable from the port.
The maximum of the sum of the latencies in every connection path that can be drawn
between the port and other ports with the JackPortIsTerminal flag set.
Returns:
TRUE if the jack_port_t belongs to the jack_client_t.
A client may call this function to prevent other objects from changing the connection
status of a port. The port must be owned by the calling client.
Returns:
0 on success, otherwise a non-zero error code
Returns:
TRUE if input monitoring has been requested for port.
Returns:
the full name of the jack_port_t (including the "client_name:" prefix).
See also:
jack_port_name_size().
Returns:
the maximum number of characters in a full JACK port name including the final
NULL character. This value is a constant.
A port’s full name contains the owning client name concatenated with a colon (:) fol-
lowed by its short name and a NULL character.
Create a new port for the client. This is an object used for moving data of any type in
or out of the client. Ports may be connected in various ways.
Each port has a short name. The port’s full name contains the name of the client
concatenated with a colon (:) followed by its short name. The jack_port_name_size()
is the maximum length of this full name. Exceeding that will cause the port registration
to fail and return NULL.
All ports have a type, which may be any non-NULL and non-zero length string, passed
as an argument. Some port types are built into the JACK API, currently only JACK_-
DEFAULT_AUDIO_TYPE.
Parameters:
client pointer to JACK client structure.
port_name non-empty short name for the new port (not including the leading
"client_name:").
port_type port type name. If longer than jack_port_type_size(), only that many
characters are significant.
flags JackPortFlags bit mask.
buffer_size must be non-zero if this is not a built-in port_type. Otherwise, it is
ignored.
Returns:
jack_port_t pointer on success, otherwise NULL.
If JackPortCanMonitor is set for this port, turn input monitoring on or off. Otherwise,
do nothing.
If JackPortCanMonitor is set for this port_name, turn input monitoring on or off. Oth-
erwise, do nothing.
Returns:
0 on success, otherwise a non-zero error code.
See also:
jack_port_name_size()
The port latency is zero by default. Clients that control physical hardware with non-
zero latency should call this to set the latency to its correct value. Note that the value
should include any systemic latency present "outside" the physical hardware controlled
by the client. For example, for a client controlling a digital audio interface connected
to an external digital converter, the latency setting should include both buffering by the
audio interface ∗and∗ the converter.
Modify a port’s short name. May be called at any time. If the resulting full name
(including the "client_name:" prefix) is longer than jack_port_name_size(), it will be
truncated.
Returns:
0 on success, otherwise a non-zero error code.
Returns:
the short name of the jack_port_t (not including the "client_name:" prefix).
See also:
jack_port_name_size().
A client may call this on a pair of its own ports to semi-permanently wire them together.
This means that a client that wants to direct-wire an input port to an output port can
call this and then no longer have to worry about moving data between them. Any data
arriving at the input port will appear automatically at the output port.
The ’destination’ port must be an output port. The ’source’ port must be an input port.
Both ports must belong to the same client. You cannot use this to tie ports between
clients. That is what a connection is for.
Returns:
0 on success, otherwise a non-zero error code
Returns:
the port type, at most jack_port_type_size() characters including a final NULL.
Returns:
the maximum number of characters in a JACK port type name including the final
NULL character. This value is a constant.
Returns:
0 on success, otherwise a non-zero error code
Remove the port from the client, disconnecting any existing connections.
Returns:
0 on success, otherwise a non-zero error code
This undoes the effect of jack_port_tie(). The port should be same as the ’destination’
port passed to jack_port_tie().
Returns:
0 on success, otherwise a non-zero error code
See also:
jack_set_buffer_size_callback()
Parameters:
client pointer to JACK client structure.
nframes new buffer size. Must be a power of two.
Returns:
0 on success, otherwise a non-zero error code
Tell JACK to call bufsize_callback whenever the size of the the buffer that will be
passed to the process_callback is about to change. Clients that depend on knowing the
buffer size must supply a bufsize_callback before activating themselves.
Parameters:
client pointer to JACK client structure.
bufsize_callback function to call when the buffer size changes.
arg argument for bufsize_callback.
Returns:
0 on success, otherwise a non-zero error code
Parameters:
client pointer to JACK client structure
onoff if non-zero, freewheel mode starts. Otherwise freewheel mode ends.
Returns:
0 on success, otherwise a non-zero error code.
Tell the Jack server to call freewheel_callback whenever we enter or leave "freewheel"
mode, passing arg as the second argument. The first argument to the callback will be
non-zero if JACK is entering freewheel mode, and zero otherwise.
Returns:
0 on success, otherwise a non-zero error code.
Tell the Jack server to call ’registration_callback’ whenever the processing graph is
reordered, passing ’arg’ as an argument.
Returns:
0 on success, otherwise a non-zero error code
Tell the Jack server to call ’registration_callback’ whenever a port is registered or un-
registered, passing ’arg’ as a second argument.
Returns:
0 on success, otherwise a non-zero error code
Tell the Jack server to call process_callback whenever there is work be done, passing
arg as the second argument.
The code in the supplied function must be suitable for real-time exe-
cution. That means that it cannot call functions that might block for
a long time.160 This includes malloc, free, printf, pthread_mutex_lock,
sleep, wait, poll, select, pthread_join, pthread_cond_wait, etc, etc.160 See
http://jackit.sourceforge.net/docs/design/design.html#SECTION004110000000000
for more information.
Returns:
0 on success, otherwise a non-zero error code, causing JACK to remove that client
from the process() graph.
Tell the Jack server to call srate_callback whenever the system sample rate changes.
Returns:
0 on success, otherwise a non-zero error code
Set the directory in which the server is expected to have put its communication FIFOs.
A client will need to call this before calling jack_client_new() if the server was started
with arguments telling it to use a non-standard directory.
Deprecated
This function is deprecated. Don’t use in new programs and remove it in old
programs.
Tell JACK to call thread_init_callback once just after the creation of the thread in
which all other callbacks will be handled.
The code in the supplied function does not need to be suitable for real-time execution.
Returns:
0 on success, otherwise a non-zero error code, causing JACK to remove that client
from the process() graph.
Tell the Jack server to call ’xrun_callback’ whenever there is a xrun, passing ’arg’ as
an argument.
Returns:
0 on success, otherwise a non-zero error code
Parameters:
msg error message text (no newline at end).
#include <sys/types.h>
Data Structures
• struct jack_ringbuffer_data_t
• struct jack_ringbuffer_t
Functions
A set of library functions to make lock-free ringbuffers available to JACK clients. The
‘capture_client.c’ (in the example_clients directory) is a fully functioning user of this
API.
The key attribute of a ringbuffer is that it can be safely accessed by two threads si-
multaneously – 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 inter-
changed.
Allocates a ringbuffer data structure of a specified size. The caller must arrange for a
call to jack_ringbuffer_free() to release the memory associated with the ringbuffer.
Parameters:
sz the ringbuffer size in bytes.
Returns:
a pointer to a new jack_ringbuffer_t, if successful; NULL otherwise.
Parameters:
rb a pointer to the ringbuffer structure.
Fill a data structure with a description of the current readable data held in the ringbuffer.
This description is returned in a two element array of jack_ringbuffer_data_t. Two
elements are needed because the data to be read may be split across the end of the
ringbuffer.
The first element will always contain a valid len field, which may be zero or greater. If
the len field is non-zero, then data can be read in a contiguous fashion using the address
given in the corresponding buf field.
If the second element has a non-zero len field, then a second contiguous stretch of data
can be read from the address given in its corresponding buf field.
Parameters:
rb a pointer to the ringbuffer structure.
vec a pointer to a 2 element array of jack_ringbuffer_data_t.
Fill a data structure with a description of the current writable space in the ringbuffer.
The description is returned in a two element array of jack_ringbuffer_data_t. Two
elements are needed because the space available for writing may be split across the end
of the ringbuffer.
The first element will always contain a valid len field, which may be zero or greater.
If the len field is non-zero, then data can be written in a contiguous fashion using the
address given in the corresponding buf field.
If the second element has a non-zero len field, then a second contiguous stretch of data
can be written to the address given in the corresponding buf field.
Parameters:
rb a pointer to the ringbuffer structure.
vec a pointer to a 2 element array of jack_ringbuffer_data_t.
Parameters:
rb a pointer to the ringbuffer structure.
Parameters:
rb a pointer to the ringbuffer structure.
dest a pointer to a buffer where data read from the ringbuffer will go.
cnt the number of bytes to read.
Returns:
the number of bytes read, which may range from 0 to cnt.
Parameters:
rb a pointer to the ringbuffer structure.
cnt the number of bytes read.
Parameters:
rb a pointer to the ringbuffer structure.
Returns:
the number of bytes available to read.
Parameters:
rb a pointer to the ringbuffer structure.
Parameters:
rb a pointer to the ringbuffer structure.
src a pointer to the data to be written to the ringbuffer.
cnt the number of bytes to write.
Returns:
the number of bytes write, which may range from 0 to cnt
Parameters:
rb a pointer to the ringbuffer structure.
cnt the number of bytes written.
Parameters:
rb a pointer to the ringbuffer structure.
Returns:
the amount of free space (in bytes) available for writing.
This simple client demonstrates the basic features of JACK as they would be used by
many applications.
#include <stdio.h>
#include <errno.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
#include <jack/jack.h>
Functions
Variables
• jack_port_t ∗ input_port
• jack_port_t ∗ output_port
This simple client demonstrates the basic features of JACK as they would be used by
many applications.
This is the shutdown callback for this JACK application. It is called by JACK if the
server ever shuts down or decides to disconnect the client.
The process callback for this JACK application. It is called by JACK at the appropriate
times.
Data Structures
• struct jack_position_t
• struct jack_transport_info_t
Defines
• #define JACK_POSITION_MASK (JackPositionBBT|JackPositionTimecode)
• #define EXTENDED_TIME_INFO
Typedefs
• typedef uint64_t jack_unique_t
• typedef int(∗ JackSyncCallback )(jack_transport_state_t state, jack_position_t
∗pos, void ∗arg)
• typedef void(∗ JackTimebaseCallback )(jack_transport_state_t state, jack_-
nframes_t nframes, jack_position_t ∗pos, int new_pos, void ∗arg)
Enumerations
• enum jack_transport_state_t { JackTransportStopped = 0, JackTransportRolling
= 1, JackTransportLooping = 2, JackTransportStarting = 3 }
• enum jack_position_bits_t { JackPositionBBT = 0x10, JackPositionTimecode =
0x20 }
• enum jack_transport_bits_t {
JackTransportState = 0x1, JackTransportPosition = 0x2, JackTransportLoop =
0x4, JackTransportSMPTE = 0x8,
JackTransportBBT = 0x10 }
Functions
• int jack_release_timebase (jack_client_t ∗client)
• int jack_set_sync_callback (jack_client_t ∗client, JackSyncCallback sync_-
callback, void ∗arg)
• int jack_set_sync_timeout (jack_client_t ∗client, jack_time_t timeout)
• int jack_set_timebase_callback (jack_client_t ∗client, int conditional, Jack-
TimebaseCallback timebase_callback, void ∗arg)
Unique ID (opaque)
Prototype for the sync_callback defined by slow-sync clients. When the client is active,
this callback is invoked just before process() in the same thread. This occurs once after
registration, then subsequently whenever some client requests a new position, or the
transport enters the JackTransportStarting state. This realtime function must not wait.
The transport state will be:
• JackTransportRolling when the timeout has expired, and the position is now a
moving target.
Parameters:
state current transport state.
pos new transport position.
arg the argument supplied by jack_set_sync_callback().
Returns:
TRUE (non-zero) when ready to roll.
Prototype for the timebase_callback used to provide extended position information. Its
output affects all of the following process cycle. This realtime function must not wait.
This function is called immediately after process() in the same thread whenever the
transport is rolling, or when any client has requested a new position in the previous cy-
cle. The first cycle after jack_set_timebase_callback() is also treated as a new position,
or the first cycle after jack_activate() if the client had been inactive.
The timebase master may not use its pos argument to set pos->frame. To change
position, use jack_transport_reposition() or jack_transport_locate(). These functions
are realtime-safe, the timebase_callback can call them directly.
Parameters:
state current transport state.
nframes number of frames in current period.
pos address of the position structure for the next cycle; pos->frame will be its
frame number. If new_pos is FALSE, this structure contains extended posi-
tion information from the current cycle. If TRUE, it contains whatever was
set by the requester. The timebase_callback’s task is to update the extended
information here.
new_pos TRUE (non-zero) for a newly requested pos, or for the first cycle after
the timebase_callback is defined.
arg the argument supplied by jack_set_timebase_callback().
Enumeration values:
JackPositionBBT Bar, Beat, Tick
JackPositionTimecode External timecode
See also:
jack_position_bits_t.
Enumeration values:
JackTransportState Transport state
JackTransportPosition Frame number
JackTransportLoop Loop boundaries (ignored)
JackTransportSMPTE SMPTE (ignored)
JackTransportBBT Bar, Beat, Tick
Transport states.
Enumeration values:
JackTransportStopped Transport halted
JackTransportRolling Transport playing
JackTransportLooping For OLD_TRANSPORT, now ignored
JackTransportStarting Waiting for sync ready
Return an estimate of the current transport frame, including any time elapsed since the
last transport positional update.
Parameters:
client the JACK client structure
Parameters:
client the JACK client structure.
tinfo current transport info structure. The "valid" field describes which fields con-
tain valid data.
Deprecated
This is for compatibility with the earlier transport interface. Use jack_transport_-
query(), instead.
Precondition:
Must be called from the process thread.
See also:
jack_set_timebase_callback
Parameters:
client the JACK client structure.
Returns:
0 on success, otherwise a non-zero error code.
Register (or unregister) as a slow-sync client, one that cannot respond immediately to
transport position changes.
The sync_callback will be invoked at the first available opportunity after its registration
is complete. If the client is currently active this will be the following process cycle, oth-
erwise it will be the first cycle after calling jack_activate(). After that, it runs according
to the JackSyncCallback rules. Clients that don’t set a sync_callback are assumed to
be ready immediately any time the transport wants to start.
Parameters:
client the JACK client structure.
sync_callback is a realtime function that returns TRUE when the client is ready.
Setting sync_callback to NULL declares that this client no longer requires
slow-sync processing.
arg an argument for the sync_callback function.
Returns:
0 on success, otherwise a non-zero error code.
See also:
jack_set_sync_callback
Parameters:
client the JACK client structure.
timeout is delay (in microseconds) before the timeout expires.
Returns:
0 on success, otherwise a non-zero error code.
Parameters:
client the JACK client structure.
conditional non-zero for a conditional request.
Returns:
• 0 on success;
• EBUSY if a conditional request fails because there was already a timebase
master;
• other non-zero error code.
Deprecated
This function still exists for compatibility with the earlier transport interface, but
it does nothing. Instead, define a JackTimebaseCallback.
See also:
jack_transport_reposition, jack_set_sync_callback
Parameters:
client the JACK client structure.
frame frame number of new transport position.
Returns:
0 if valid request, non-zero otherwise.
Parameters:
client the JACK client structure.
pos pointer to structure for returning current transport position; pos->valid will
show which fields contain valid data. If pos is NULL, do not return position
information.
Returns:
Current transport state.
See also:
jack_transport_locate, jack_set_sync_callback
Parameters:
client the JACK client structure.
pos requested new transport position.
Returns:
0 if valid request, EINVAL if position structure rejected.
See also:
jack_set_sync_callback
Parameters:
client the JACK client structure.
Parameters:
client the JACK client structure.
Defines
• #define JACK_MAX_FRAMES
• #define JACK_DEFAULT_AUDIO_TYPE "32 bit float mono audio"
Typedefs
• typedef char shm_name_t [32]
• typedef int32_t jack_shmsize_t
• typedef uint32_t jack_nframes_t
• typedef uint64_t jack_time_t
• typedef _jack_port jack_port_t
• typedef _jack_client jack_client_t
• typedef uint32_t jack_port_id_t
• typedef int(∗ JackProcessCallback )(jack_nframes_t nframes, void ∗arg)
• typedef void(∗ JackThreadInitCallback )(void ∗arg)
• typedef int(∗ JackGraphOrderCallback )(void ∗arg)
• typedef int(∗ JackXRunCallback )(void ∗arg)
• typedef int(∗ JackBufferSizeCallback )(jack_nframes_t nframes, void ∗arg)
• typedef int(∗ JackSampleRateCallback )(jack_nframes_t nframes, void ∗arg)
• typedef void(∗ JackPortRegistrationCallback )(jack_port_id_t port, int, void
∗arg)
• typedef void(∗ JackFreewheelCallback )(int starting, void ∗arg)
• typedef float jack_default_audio_sample_t
Enumerations
• enum JackPortFlags {
JackPortIsInput = 0x1, JackPortIsOutput = 0x2, JackPortIsPhysical = 0x4, Jack-
PortCanMonitor = 0x8,
JackPortIsTerminal = 0x10 }
Used for the type argument of jack_port_register() for default audio ports.
Value:
jack_client_t is an opaque type. You may only access it using the API provided.
For convenience, use this typedef if you want to be able to change between float and
double. You may want to typedef sample_t to jack_default_audio_sample_t in your
application.
Ports have unique ids. A port registration callback is the only place you ever need to
know their value.
jack_port_t is an opaque type. You may only access it using the API provided.
Type used to represent the value of free running monotonic clock with units of mi-
croseconds.
Prototype for the bufsize_callback that is invoked whenever the JACK engine buffer
size changes. Although this function is called in the JACK process thread, the normal
process cycle is suspended during its operation, causing a gap in the audio flow. So,
the bufsize_callback can allocate storage, touch memory not previously referenced, and
perform other operations that are not realtime safe.
Parameters:
nframes buffer size
arg pointer supplied by jack_set_buffer_size_callback().
Returns:
zero on success, non-zero on error
Prototype for the client supplied function that is called whenever jackd starts or stops
freewheeling.
Parameters:
starting non-zero if we start starting to freewheel, zero otherwise
arg pointer to a client supplied structure
Prototype for the client supplied function that is called whenever the processing graph
is reordered.
Parameters:
arg pointer to a client supplied structure
Returns:
zero on success, non-zero on error
Prototype for the client supplied function that is called whenever a port is registered or
unregistered.
Parameters:
arg pointer to a client supplied structure
Prototype for the client supplied function that is called by the engine anytime there is
work to be done.
Precondition:
nframes == jack_get_buffer_size()
nframes == pow(2,x)
Parameters:
nframes number of frames to process
arg pointer to a client supplied structure
Returns:
zero on success, non-zero on error
Prototype for the client supplied function that is called when the engine sample rate
changes.
Parameters:
nframes new engine sample rate
arg pointer to a client supplied structure
Returns:
zero on success, non-zero on error
Prototype for the client supplied function that is called once after the creation of the
thread in which other callbacks will be made. Special thread characteristics can be set
from this callback, for example. This is a highly specialized callback and most clients
will not and should not use it.
Parameters:
arg pointer to a client supplied structure
Returns:
void
Prototype for the client supplied function that is called whenever an xrun has occured.
Parameters:
arg pointer to a client supplied structure
Returns:
zero on success, non-zero on error
A port has a set of flags that are formed by AND-ing together the desired values from
the list below. The flags "JackPortIsInput" and "JackPortIsOutput" are mutually exclu-
sive and it is an error to use them both.
Enumeration values:
JackPortIsInput if JackPortIsInput is set, then the port can receive data.
JackPortIsOutput if JackPortIsOutput is set, then data can be read from the port.
for an output port: the data available at the port does not originate from any
other port
Audio synthesizers, I/O hardware interface clients, HDR systems are exam-
ples of clients that would set this flag for their ports.
JACK-AUDIO-CONNECTION-
KIT Page
Documentation
• Requirements
• Overview
• Timebase Master
• Transport Control
• Transport Clients
• Compatibility
7.1.1 Requirements
• We need sample-level accuracy for transport control. This implies that the trans-
port client logic has to be part of the realtime process chain.
66 JACK-AUDIO-CONNECTION-KIT Page Documentation
• We don’t want to add another context switch. So, the transport client logic has to
run in the context of the client’s process thread. To avoid making an extra pass
through the process graph, no transport changes take effect until the following
process cycle. That way, the transport info is stable throughout each cycle.
• We want to allow multiple clients to change the transport state. This is mostly a
usability issue. Any client can start or stop playback, or seek to a new location.
The user need not switch windows to accomplish these tasks.
• We want a way for clients with heavyweight state to sync up when the user
presses "play", before the transport starts rolling.
7.1.2 Overview
The former transport master role has been divided into two layers:
Existing transport clients continue to work in compatibility mode. But, old-style time-
base masters will no longer control the transport.
When a new client takes over, the former timebase callback is no longer called. Taking
over the timebase may be done conditionally, in which case the takeover fails when
there is a master already. The existing master can release it voluntarily, if desired.
If the timebase master releases the timebase or exits the JACK graph for any reason, the
JACK engine takes over at the start of the next process cycle. The transport state does
not change. If rolling, it continues to play, with frame numbers as the only available
position information.
The JACK engine itself manages stopping and starting of the transport. Any client can
make transport control requests at any time. These requests take effect no sooner than
the next process cycle, sometimes later. The transport state is always valid, initially it
is JackTransportStopped.
The engine handles polling of slow-sync clients. When someone calls jack_transport_-
start(), the engine resets the poll bits and changes to a new state, JackTransportStarting.
The sync_callback function for each slow-sync client will be invoked in the JACK
process thread while the transport is starting. If it has not already done so, the client
needs to initiate a seek to reach the starting position. The sync_callback returns false
until the seek completes and the client is ready to play. When all slow-sync clients are
ready, the state changes to JackTransportRolling.
This callback is a realtime function that runs in the JACK process thread.
Clients that don’t declare a sync_callback are assumed to be ready immediately, any
time the transport wants to start. If a client no longer requires slow-sync processing, it
can set its sync_callback to NULL.
These request a new transport position. They can be called at any time by any client.
Even the timebase master must use them. If the request is valid, it goes into effect in
two process cycles. If there are slow-sync clients and the transport is already rolling, it
will enter the JackTransportStarting state and begin invoking their sync_callbacks until
ready.
Transport clients were formerly known as "transport slaves". We want to make it easy
for almost every JACK client to be a transport client.
This function can be called from any thread. If called from the process thread, pos
corresponds to the first frame of the current cycle and the state returned is valid for the
entire cycle.
7.1.6 Compatibility
During the transition period we will support the old-style interfaces in compatibility
mode as deprecated interfaces. This compatibility is not 100%, there are limitations.
The main reasons for doing this are:
Unfortunately, the old-style timebase master interface cannot coexist cleanly with such
new features as jack_transport_locate() and slow-sync clients. So, these interfaces are
only present as stubs:
For compatibility with future changes, it would be good to avoid structures entirely.
Nevertheless, the jack_position_t structure provides a convenient way to collect time-
base information in several formats that clearly all refer to a single moment. To mini-
mize future binary compatibility problems, this structure has some padding at the end,
making it possible to extend it without necessarily breaking compatibility. New fields
can be allocated from the padding area, with access controlled by newly defined valid
bits, all of which are currently forced to zero. That allows the structure size and offsets
to remain constant.
This design currently does not address several issues. This means they will probably
not be included in JACK release 1.0.
• variable speed
• reverse play
• looping
• Requirements
• Overview
• Operating System Dependencies
• Processor Dependencies
• Issues Not Addressed
7.2.1 Requirements
• Each platform should build directly from CVS or from a tarball using the GNU
./configure tools. Platform-specific toolsets can by used for development, but the
GNU tools should at least work for basic distribution and configuration.
7.2.2 Overview
JACK is written for a POSIX environment compliant with IEEE Std 1003.1-2001,
ISO/IEC 9945:2003, including the POSIX Threads Extension (1003.1c-1995) and the
Realtime and Realtime Threads feature groups. When some needed POSIX feature
is missing on a platform, the preferred solution is to provide a substitute, as with the
fakepoll.c implementation for Mac OS X.
Whenever possible, OS dependencies should be auto-detected by configure. Some-
times they can be isolated in OS-specific header files, found in subdirectories of
config/os and referenced with a <sysdeps/xxx.h> name.
If conditional compilation must be used in mainline platform-independent code, avoid
using the system name. Instead, #define a descriptive name in <config.h>, and
test it like this:
#ifdef JACK_USE_MACH_THREADS
allocate_mach_serverport(engine, client);
client->running = FALSE;
#endif
JACK uses some low-level machine operations for thread-safe updates to shared mem-
ory. A low-level implementation of <sysdeps/atomicity.h> is provided for ev-
ery target processor architecture. There is also a generic implementation using POSIX
spin locks, but that is not a good enough solution for serious use.
The GCC package provides versions that work on most modern hardware. We’ve tried
to keep things as close to the original as possible, while removing a bunch of os-specific
files that didn’t seem relevant. A primary goal has been to avoid changing the CPU-
dependent <sysdeps/atomicity.h> headers.
The relevant GCC documentation provides some help-
ful background, especially the atomicity.h discussion at
<http://gcc.gnu.org/onlinedocs/porting/Thread-safety.html>.
• Cross-compilation has not been tested, or even thought through in much detail.
The host is the system on which JACK will run. This may differ from the build
system doing the compilation. These are selected using the standard ./configure
options -host and -build. Usually, ./config.guess can print the appropriate
canonical name for any system on which it runs.
• Platform-specific build tools like Apple’s Project Builder are not well-supported.
bar inprocess, 22
jack_position_t, 12 jack_finish, 22
jack_transport_info_t, 17 jack_initialize, 22
bar_start_tick input_port
jack_position_t, 12 port_pair_t, 19
jack_transport_info_t, 17 simple_client.c, 48
beat
jack_position_t, 12 jack.h, 23
jack_transport_info_t, 17 jack_activate, 25
beat_type jack_client_close, 25
jack_position_t, 12 jack_client_name_size, 25
jack_transport_info_t, 17 jack_client_new, 25
beats_per_bar jack_client_thread_id, 26
jack_position_t, 12 jack_connect, 26
jack_transport_info_t, 17 jack_cpu_load, 26
beats_per_minute jack_deactivate, 26
jack_position_t, 12 jack_disconnect, 26
jack_transport_info_t, 17 jack_engine_takeover_timebase,
buf 27
jack_ringbuffer_data_t, 14 jack_error_callback, 39
jack_ringbuffer_t, 15 jack_frame_time, 27
jack_frames_since_cycle_start,
EXTENDED_TIME_INFO 27
transport.h, 51 jack_get_buffer_size, 27
jack_get_ports, 28
frame jack_get_sample_rate, 28
jack_position_t, 12 jack_internal_client_close, 28
jack_transport_info_t, 17 jack_internal_client_new, 28
frame_rate jack_is_realtime, 29
jack_position_t, 12 jack_on_shutdown, 29
jack_transport_info_t, 17 jack_port_by_id, 29
frame_time jack_port_by_name, 30
jack_position_t, 12 jack_port_connected, 30
jack_port_connected_to, 30
inprocess jack_port_disconnect, 30
inprocess.c, 22 jack_port_ensure_monitor, 30
inprocess.c, 21 jack_port_flags, 31
76 INDEX
jack_port_get_all_connections, jack_client_new
31 jack.h, 25
jack_port_get_buffer, 31 jack_client_t
jack_port_get_connections, 31 types.h, 60
jack_port_get_latency, 32 jack_client_thread_id
jack_port_get_total_latency, 32 jack.h, 26
jack_port_is_mine, 32 jack_connect
jack_port_lock, 32 jack.h, 26
jack_port_monitoring_input, 32 jack_cpu_load
jack_port_name, 33 jack.h, 26
jack_port_name_size, 33 jack_deactivate
jack_port_register, 33 jack.h, 26
jack_port_request_monitor, 34 jack_default_audio_sample_t
jack_port_request_monitor_by_- types.h, 60
name, 34 JACK_DEFAULT_AUDIO_TYPE
jack_port_set_latency, 34 types.h, 59
jack_port_set_name, 34 jack_disconnect
jack_port_short_name, 35 jack.h, 26
jack_port_tie, 35 jack_engine_takeover_timebase
jack_port_type, 35 jack.h, 27
jack_port_type_size, 35 jack_error_callback
jack_port_unlock, 35 jack.h, 39
jack_port_unregister, 35 jack_finish
jack_port_untie, 36 inprocess.c, 22
jack_set_buffer_size, 36 jack_frame_time
jack_set_buffer_size_callback, jack.h, 27
36 jack_frames_since_cycle_start
jack_set_error_function, 37 jack.h, 27
jack_set_freewheel, 37 jack_get_buffer_size
jack_set_freewheel_callback, 37 jack.h, 27
jack_set_graph_order_callback, jack_get_current_transport_frame
37 transport.h, 53
jack_set_port_registration_- jack_get_ports
callback, 38 jack.h, 28
jack_set_process_callback, 38 jack_get_sample_rate
jack_set_sample_rate_callback, jack.h, 28
38 jack_get_transport_info
jack_set_server_dir, 38 transport.h, 53
jack_set_thread_init_callback, 39 jack_initialize
jack_set_xrun_callback, 39 inprocess.c, 22
jack_activate jack_internal_client_close
jack.h, 25 jack.h, 28
jack_client_close jack_internal_client_new
jack.h, 25 jack.h, 28
jack_client_name_size jack_is_realtime
jack.h, 25 jack.h, 29
JACK_MAX_FRAMES jack_port_request_monitor_by_name
types.h, 59 jack.h, 34
jack_nframes_t jack_port_set_latency
types.h, 60 jack.h, 34
jack_on_shutdown jack_port_set_name
jack.h, 29 jack.h, 34
jack_port_by_id jack_port_short_name
jack.h, 29 jack.h, 35
jack_port_by_name jack_port_t
jack.h, 30 types.h, 60
jack_port_connected jack_port_tie
jack.h, 30 jack.h, 35
jack_port_connected_to jack_port_type
jack.h, 30 jack.h, 35
jack_port_disconnect jack_port_type_size
jack.h, 30 jack.h, 35
jack_port_ensure_monitor jack_port_unlock
jack.h, 30 jack.h, 35
jack_port_flags jack_port_unregister
jack.h, 31 jack.h, 35
jack_port_get_all_connections jack_port_untie
jack.h, 31 jack.h, 36
jack_port_get_buffer jack_position_bits_t
jack.h, 31 transport.h, 52
jack_port_get_connections JACK_POSITION_MASK
jack.h, 31 transport.h, 51
jack_port_get_latency jack_position_t, 11
jack.h, 32 bar, 12
jack_port_get_total_latency bar_start_tick, 12
jack.h, 32 beat, 12
jack_port_id_t beat_type, 12
types.h, 60 beats_per_bar, 12
jack_port_is_mine beats_per_minute, 12
jack.h, 32 frame, 12
jack_port_lock frame_rate, 12
jack.h, 32 frame_time, 12
jack_port_monitoring_input next_time, 12
jack.h, 32 padding, 12
jack_port_name tick, 13
jack.h, 33 ticks_per_beat, 13
jack_port_name_size unique_1, 13
jack.h, 33 unique_2, 13
jack_port_register usecs, 13
jack.h, 33 valid, 13
jack_port_request_monitor jack_release_timebase
jack.h, 34 transport.h, 54
jack_ringbuffer_create jack_set_port_registration_callback
ringbuffer.h, 43 jack.h, 38
jack_ringbuffer_data_t, 14 jack_set_process_callback
buf, 14 jack.h, 38
len, 14 jack_set_sample_rate_callback
jack_ringbuffer_free jack.h, 38
ringbuffer.h, 43 jack_set_server_dir
jack_ringbuffer_get_read_vector jack.h, 38
ringbuffer.h, 43 jack_set_sync_callback
jack_ringbuffer_get_write_vector transport.h, 54
ringbuffer.h, 43 jack_set_sync_timeout
jack_ringbuffer_mlock transport.h, 55
ringbuffer.h, 44 jack_set_thread_init_callback
jack_ringbuffer_read jack.h, 39
ringbuffer.h, 44 jack_set_timebase_callback
jack_ringbuffer_read_advance transport.h, 55
ringbuffer.h, 44 jack_set_transport_info
jack_ringbuffer_read_space transport.h, 56
ringbuffer.h, 45 jack_set_xrun_callback
jack_ringbuffer_reset jack.h, 39
ringbuffer.h, 45 jack_shmsize_t
jack_ringbuffer_t, 15 types.h, 60
buf, 15 jack_shutdown
mlocked, 15 simple_client.c, 47
read_ptr, 15 jack_time_t
size, 15 types.h, 60
size_mask, 15 jack_transport_bits_t
write_ptr, 15 transport.h, 52
jack_ringbuffer_write jack_transport_info_t, 16
ringbuffer.h, 45 bar, 17
jack_ringbuffer_write_advance bar_start_tick, 17
ringbuffer.h, 45 beat, 17
jack_ringbuffer_write_space beat_type, 17
ringbuffer.h, 46 beats_per_bar, 17
jack_set_buffer_size beats_per_minute, 17
jack.h, 36 frame, 17
jack_set_buffer_size_callback frame_rate, 17
jack.h, 36 loop_end, 17
jack_set_error_function loop_start, 17
jack.h, 37 smpte_frame_rate, 17
jack_set_freewheel smpte_offset, 17
jack.h, 37 tick, 17
jack_set_freewheel_callback ticks_per_beat, 17
jack.h, 37 transport_state, 17
jack_set_graph_order_callback usecs, 17
jack.h, 37 valid, 17
jack_transport_locate JackTimebaseCallback
transport.h, 56 transport.h, 52
jack_transport_query JackTransportBBT
transport.h, 56 transport.h, 53
jack_transport_reposition JackTransportLoop
transport.h, 57 transport.h, 53
jack_transport_start JackTransportLooping
transport.h, 57 transport.h, 53
jack_transport_state_t JackTransportPosition
transport.h, 53 transport.h, 53
jack_transport_stop JackTransportRolling
transport.h, 58 transport.h, 53
jack_unique_t JackTransportSMPTE
transport.h, 51 transport.h, 53
JackBufferSizeCallback JackTransportStarting
types.h, 60 transport.h, 53
JackFreewheelCallback JackTransportState
types.h, 61 transport.h, 53
JackGraphOrderCallback JackTransportStopped
types.h, 61 transport.h, 53
JackPortCanMonitor JackXRunCallback
types.h, 63 types.h, 63
JackPortFlags
types.h, 63 len
JackPortIsInput jack_ringbuffer_data_t, 14
types.h, 63 loop_end
JackPortIsOutput jack_transport_info_t, 17
types.h, 63 loop_start
JackPortIsPhysical jack_transport_info_t, 17
types.h, 63
JackPortIsTerminal main
types.h, 63 simple_client.c, 47
JackPortRegistrationCallback mainpage.dox, 40
types.h, 61 mlocked
JackPositionBBT jack_ringbuffer_t, 15
transport.h, 52 next_time
JackPositionTimecode jack_position_t, 12
transport.h, 52
JackProcessCallback output_port
types.h, 62 port_pair_t, 19
JackSampleRateCallback simple_client.c, 48
types.h, 62
JackSyncCallback padding
transport.h, 51 jack_position_t, 12
JackThreadInitCallback port_pair_t, 19
types.h, 62 input_port, 19
output_port, 19 jack_position_t, 13
porting.dox, 41 jack_transport_info_t, 17
process transport.dox, 49
simple_client.c, 48 transport.h, 50
EXTENDED_TIME_INFO, 51
read_ptr jack_get_current_transport_-
jack_ringbuffer_t, 15 frame, 53
ringbuffer.h, 42 jack_get_transport_info, 53
jack_ringbuffer_create, 43 jack_position_bits_t, 52
jack_ringbuffer_free, 43 JACK_POSITION_MASK, 51
jack_ringbuffer_get_read_vector, jack_release_timebase, 54
43 jack_set_sync_callback, 54
jack_ringbuffer_get_write_- jack_set_sync_timeout, 55
vector, 43 jack_set_timebase_callback, 55
jack_ringbuffer_mlock, 44 jack_set_transport_info, 56
jack_ringbuffer_read, 44 jack_transport_bits_t, 52
jack_ringbuffer_read_advance, jack_transport_locate, 56
44 jack_transport_query, 56
jack_ringbuffer_read_space, 45 jack_transport_reposition, 57
jack_ringbuffer_reset, 45 jack_transport_start, 57
jack_ringbuffer_write, 45 jack_transport_state_t, 53
jack_ringbuffer_write_advance, jack_transport_stop, 58
45 jack_unique_t, 51
jack_ringbuffer_write_space, 46 JackPositionBBT, 52
JackPositionTimecode, 52
shm_name_t JackSyncCallback, 51
types.h, 63 JackTimebaseCallback, 52
simple_client.c, 47 JackTransportBBT, 53
input_port, 48 JackTransportLoop, 53
jack_shutdown, 47 JackTransportLooping, 53
main, 47 JackTransportPosition, 53
output_port, 48 JackTransportRolling, 53
process, 48 JackTransportSMPTE, 53
size JackTransportStarting, 53
jack_ringbuffer_t, 15 JackTransportState, 53
size_mask JackTransportStopped, 53
jack_ringbuffer_t, 15 transport_state
smpte_frame_rate jack_transport_info_t, 17
jack_transport_info_t, 17 types.h, 59
smpte_offset jack_client_t, 60
jack_transport_info_t, 17 jack_default_audio_sample_t, 60
JACK_DEFAULT_AUDIO_-
tick TYPE, 59
jack_position_t, 13 JACK_MAX_FRAMES, 59
jack_transport_info_t, 17 jack_nframes_t, 60
ticks_per_beat jack_port_id_t, 60
jack_port_t, 60
jack_shmsize_t, 60
jack_time_t, 60
JackBufferSizeCallback, 60
JackFreewheelCallback, 61
JackGraphOrderCallback, 61
JackPortCanMonitor, 63
JackPortFlags, 63
JackPortIsInput, 63
JackPortIsOutput, 63
JackPortIsPhysical, 63
JackPortIsTerminal, 63
JackPortRegistrationCallback, 61
JackProcessCallback, 62
JackSampleRateCallback, 62
JackThreadInitCallback, 62
JackXRunCallback, 63
shm_name_t, 63
unique_1
jack_position_t, 13
unique_2
jack_position_t, 13
usecs
jack_position_t, 13
jack_transport_info_t, 17
valid
jack_position_t, 13
jack_transport_info_t, 17
write_ptr
jack_ringbuffer_t, 15