jack_iodelay
JACK toolkit client to measure roundtrip latency
Synopsis
jack_iodelay
add an example, a script, a trick and tips
examples
no example yet ...
... Feel free to add your own example above to help other Linux-lovers !
description
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.
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.
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.
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.
If no incoming
signal is detected from the input port, jack_iodelay will
print
Signal below
threshold... .
every second
until this changes (e.g. until you establish the correct
connections).
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.
author
Originally
written in C++ by Fons Adriaensen, ported to C by Torben
Hohn.