210 lines
8.8 KiB
Plaintext
210 lines
8.8 KiB
Plaintext
:title: LADI JACK Audio Connection Kit
|
|
:docinfo: private-header
|
|
:keywords: LADI, JACK, jack-audio-connection-kit, jackdbus, jack2
|
|
:toc:
|
|
|
|
= (LADI) jackdbus
|
|
|
|
image:https://github.com/LADI/jackdbus/actions/workflows/build.yml/badge.svg["Build status badge", link="https://github.com/LADI/jackdbus/actions"]
|
|
image:https://repology.org/badge/tiny-repos/jack-audio-connection-kit.svg["Repology bandge", link="https://repology.org/metapackage/jack-audio-connection-kit/versions"]
|
|
|
|
== Overview
|
|
This software implements D-Bus endpoint for JACK server.
|
|
|
|
== Brief History
|
|
Initial version of link:https://github.com/LADI/jackdbus[jackdbus] was created
|
|
as part of LADI project and was ad-hoc modification of link:https://jackdbus.ladish.org/jack1-design.html[JACK1] link:https://github.com/jackaudio/jack1/[codebase].
|
|
jackdbus for JACK1 was maintained first as a setup of ad-hoc patches,
|
|
then via Mercural and then via Git.
|
|
In 2008/2009, jackdbus was ported to jackdmp codebase along with an implementation
|
|
of the newly designed for the new need control API for JACK.
|
|
The result of this merge became known as
|
|
link:https://web.archive.org/web/20170106162202/http://lac.linuxaudio.org/2009/cdm/Thursday/01_Letz/01.pdf[JACK2].
|
|
As of 2022, jackdbus is again maintained in LADI project.
|
|
The jackaudio.org version of jackdbus is considered older/alternative
|
|
implementation.
|
|
|
|
For LADI specific issues, submit issues or pull request to LADI project.
|
|
For related discussions, you are invited to join
|
|
link:https://libera.chat/[Libera.Chat] channel #ladi
|
|
|
|
IMPORTANT: Do not submit LADI specific issues to jackaudio project.
|
|
|
|
|
|
== D-Bus access
|
|
D-Bus is an object model that provides IPC mechanism.
|
|
D-Bus supports autoactivation of objects,
|
|
thus making it simple and reliable to code a "single instance" application or daemon,
|
|
and to launch applications and daemons on demand when their services are needed.
|
|
|
|
Improvements over classical "jackd" approach:
|
|
|
|
* Simplified single thread model for control and monitor
|
|
applications. Various D-Bus language bindings make it trivial to
|
|
write control and monitor applications using scripting languages
|
|
like Python, Ruby, Perl, etc..
|
|
* A log file is available for inspection even when autoactivation
|
|
happens by the first launched JACK application.
|
|
* A real configuration file is used to persist settings to be
|
|
manipulated through configuration interface of JACK D-Bus object.
|
|
* Improved graph inspection and control mechanism. JACK graph is
|
|
versioned. Connections, ports and clients have unique
|
|
(monotonically increasing) numeric IDs.
|
|
* High level abstraction of JACK settings. Allows applications that
|
|
can configure JACK to expose parameters that were not known at
|
|
compile (or tarball release) time. Recent real world examples are
|
|
the JACK MIDI driver parameters and support for FFADO driver in
|
|
QJackCtl. Upgrading of JACK requires upgrade of QJackCtl in order
|
|
to make new settings available in the GUI.
|
|
|
|
=== How it works
|
|
==== Autoactivation and starting/stopping JACK server
|
|
First, application that issues D-Bus method call to JACK controller object,
|
|
causes D-Bus session daemon to activate the object by starting the jackdbus executable.
|
|
Activating controller object does not start the server.
|
|
Instead controller object has several interfaces.
|
|
The most important of them is the control interface.
|
|
Control interface contains methods for starting and stopping JACK server,
|
|
loading and unloading of internal clients (netjack),
|
|
setting buffer size and resetting xrun counter.
|
|
It also contains methods for querying information required by monitoring
|
|
applications:
|
|
|
|
* whether JACK server is started
|
|
* whether JACK server is running in realtime mode
|
|
* sample rate
|
|
* DSP load
|
|
* current buffer size
|
|
* latency
|
|
* xrun counter
|
|
|
|
JACK server autostart is achieved by libjack calling "jack server start" method of
|
|
JACK control D-Bus interface.
|
|
|
|
==== JACK settings
|
|
Applications that want to manage JACK settings can query
|
|
and set all settings that were traditionally specified as
|
|
jackd command-line parameters.
|
|
Interface abstraction provides virtual tree of parameter
|
|
containers with container leaves that contain parameters.
|
|
Parameters are accessed using simple addressing scheme (array of strings)
|
|
where address defines path to parameter, like "drivers", "alsa", "dither".
|
|
|
|
Overview of the tree of standard settings' addresses:
|
|
|
|
* "engine"
|
|
* "engine", "driver"
|
|
* "engine", "realtime"
|
|
* "engine", ...more engine parameters
|
|
* "driver", "device"
|
|
* "driver", ...more driver parameters
|
|
* "drivers", "alsa", "device"
|
|
* "drivers", "alsa", ...more alsa driver parameters
|
|
* "drivers", ...more drivers
|
|
* "internals", "netmanager", "multicast ip"
|
|
* "internals", "netmanager", ...more netmanager parameters
|
|
* "internals", ...more internals
|
|
|
|
JACK settings are persisted.
|
|
I.e. they are automatically saved by jackdbus when they are set.
|
|
Next time user starts JACK server, last saved settings will be automatically used.
|
|
Changing JACK settings through the configure D-Bus interface takes effect on next
|
|
JACK server start.
|
|
On the fly change of the buffer size, as available in the libjack
|
|
(jack.h) API, is also possible through the control D-Bus interface.
|
|
|
|
==== JACK parameter constraints
|
|
JACK internal modules that provide parameters visible through control API can provide
|
|
information about parameter valid range (like realtime priority) or
|
|
whether parameter should be presented as enumeration.
|
|
Enumeration parameters can be strict and non-strict.
|
|
Example of strict enum parameter is dither parameter of ALSA driver,
|
|
it has only predefined valid values: "shaped noise",
|
|
"rectangular", "triangualr" and "none".
|
|
|
|
Example of non-strict parameter is device parameter of ALSA driver.
|
|
It is useful to provide some detected device strings as choices to user,
|
|
but still allow user to specify custom string that ALSA layer is supposed to
|
|
understand.
|
|
|
|
==== JACK patchbay
|
|
In order to simplify patchbay applications, extended functionality is provided.
|
|
There is a method that returns the current graph state.
|
|
Graph state has unique monotonically increasing version number
|
|
and contains info about all clients, their ports and connections.
|
|
Connections, ports and clients have unique numeric IDs
|
|
that are guaranteed not to be reused.
|
|
Notifica tions about graph changes are provided using
|
|
D-Bus signals.
|
|
|
|
=== JACK D-Bus enabled applications
|
|
|
|
==== jack_control
|
|
JACK contains "jack_control" executable, https://gitea.ladish.org/LADI/jack_control/src/branch/main/jack_control.py[a 300 lines of Python] exposing
|
|
JACK D-Bus functionality. It allows chained execution of several commands.
|
|
For example "jack control ds alsa dps midi-driver raw eps realtime on
|
|
eps relatime-priority 70 start" selects ALSA driver, enables JACK MIDI
|
|
raw backend, enables realtime mode, sets realtime priority to 70 and starts
|
|
JACK server.
|
|
|
|
==== LADI Tools
|
|
https://gitea.ladish.org/LADI/laditools[LADI Tools] is a set of programs to configure, control and monitor JACK.
|
|
It provides tray icon, Window Maker style dockapp,
|
|
G15 keyboard LCD display integration application,
|
|
configuration utility for managing JACK settings
|
|
and log file monitor application.
|
|
|
|
All tools are written in Python.
|
|
|
|
==== Patchage
|
|
https://drobilla.net/software/patchage.html[Patchage], the ubiquitous canvas modular patch bay can be compiled to use
|
|
D-Bus instead of libjack to communicate with JACK.
|
|
|
|
Doing so also enables JACK server start/stop functionality in Patchage.
|
|
|
|
Various JACK related features are implemented:
|
|
|
|
==== LADI Session handler (LADISH)
|
|
https://ladish.org/[LADISH], a rewrite of LASH session handler
|
|
uses D-Bus to communicate with JACK.
|
|
|
|
Various JACK related features are implemented:
|
|
|
|
* Saving of JACK settings as part of "studio" session.
|
|
|
|
* Handling of "JACK server crash" scenario: restarting JACK server,
|
|
notifying JACK applications that JACK server reappeared so they
|
|
can reconnect to it, and restoring JACK connections.
|
|
|
|
==== QjackCtl JACK Audio Connection Kit - Qt GUI Interface
|
|
https://qjackctl.sourceforge.io/[QjackCtl] is a simple Qt application
|
|
to control the JACK sound server daemon, is another jackdbus frontend.
|
|
|
|
==== KXStudio Cadence
|
|
https://kx.studio/Applications:Cadence[Cadence], a set of tools
|
|
useful for audio production, is another jackdbus frontend.
|
|
|
|
==== Studio Controls
|
|
https://ovenwerks.github.io/studio-controls/[Studio Controls], a way to
|
|
configure your Linux-based audio installation for real-time audio, is
|
|
another jackdbus frontend.
|
|
|
|
== Source
|
|
Tarballs:
|
|
|
|
* link:https://dl.ladish.org/jackdbus/[https://dl.ladish.org/jackdbus/ (signed) tarballs]
|
|
|
|
GIT repositories:
|
|
|
|
* https://gitea.ladish.org/LADI/jackdbus[Upstream development GIT repository] +
|
|
Self-hosted upstream
|
|
* https://repo.or.cz/jackdbus.git[Primary backup GIT repository at repo.or.cz] +
|
|
Cloud hosted
|
|
|
|
== Packaging
|
|
https://jackdbus.ladish.org/packaging.html[Packaging HOWTO]
|
|
|
|
References
|
|
----------
|
|
. link:https://web.archive.org/web/20170106162202/http://lac.linuxaudio.org/2009/cdm/Thursday/01_Letz/01.pdf[What's new in JACK2?]
|