61 lines
2.9 KiB
Plaintext
61 lines
2.9 KiB
Plaintext
.TH JACK_IODELAY "1" "!DATE!" "!VERSION!"
|
|
.SH NAME
|
|
jack_iodelay \- JACK toolkit client to measure roundtrip latency
|
|
.SH SYNOPSIS
|
|
.B jack_iodelay
|
|
.SH DESCRIPTION
|
|
.B jack_iodelay
|
|
will create one input and one output port, and then
|
|
measures the latency (signal delay) between them. For this to work,
|
|
the output port must be connected to its input port. The measurement
|
|
is accurate to a resolution of greater than 1 sample.
|
|
.PP
|
|
The expected use is to connect jack_iodelay's output port to a
|
|
hardware playback port, then use a physical loopback cable from the
|
|
corresponding hardware output connector to an input connector, and to
|
|
connect that corresponding hardware capture port to jack_iodelay's
|
|
input port. This creates a roundtrip that goes through any
|
|
analog-to-digital and digital-to-analog converters that are present in
|
|
the audio hardware.
|
|
.PP
|
|
Although the hardware loopback latency is the expected use, it is also
|
|
possible to use jack_iodelay to measure the latency along any fully
|
|
connected signal path, such as those involving other JACK clients.
|
|
.PP
|
|
Once jack_iodelay completes its measurement it will print the total
|
|
latency it has detected. This will include the JACK buffer length in
|
|
addition to any other latency in the signal path. It will continue to
|
|
print the value every 0.5 seconds so that if you wish you can
|
|
vary aspects of the signal path to see their effect on the measured
|
|
latency.
|
|
.PP
|
|
If no incoming signal is detected from the input port, jack_iodelay
|
|
will print
|
|
.PP
|
|
\fT Signal below threshold... .\fR
|
|
.PP
|
|
every second until this changes (e.g. until you establish the correct
|
|
connections).
|
|
.PP
|
|
To use the value measured by jack_iodelay with the -I and -O arguments
|
|
of a JACK backend (also called Input Latency and Output Latency in the
|
|
setup dialog of qjackctl), you must subtract the JACK buffer size from
|
|
the result. The buffer size is determined by multiplying the number of
|
|
frames per period (given to the jackd backend by the -p or --period
|
|
option) by the number of periods per buffer (given to the jackd
|
|
backend by the -n or --nperiods option). Note that JACK2 will add an
|
|
implicit additional period when using the default asynchronous mode,
|
|
so for JACK1 or JACK2 in synchronous mode, the buffer size is n*p, but
|
|
for JACK2 in asynchronous mode the buffer size is (n+1)*p. Once the
|
|
JACK buffer size is subtracted from the measured latency, the result
|
|
is the "extra" latency due to the interface hardware. Then, if you
|
|
believe that the latency is equally distributed between the input and
|
|
output parts of your audio hardware (extremely likely), divide the
|
|
result by two and use that for input and output latency
|
|
values. Doing this measurement will enable JACK clients that use the
|
|
JACK latency API to accurately position/delay audio to keep signals
|
|
synchronized even when there are inherent delays in the end-to-end
|
|
signal pathways.
|
|
.SH AUTHOR
|
|
Originally written in C++ by Fons Adriaensen, ported to C by Torben Hohn.
|