4 <meta http-equiv=
"Content-Type" content=
"text/html; charset=UTF-8">
5 <meta name=
"generator" content=
"AsciiDoc 10.2.1">
6 <meta name=
"keywords" content=
"LADI, JACK, jack-audio-connection-kit, jackdbus, jack2">
7 <title>LADI JACK Audio Connection Kit
</title>
8 <style type=
"text/css">
10 * AsciiDoc 'ladi' theme, based on 'volnitsky' theme for xhtml11 and html5 backends.
11 * Based on css from http://volnitsky.com, which was in turn based on default
14 * FIXME: The styling is still a bit rough in places.
20 font-family: Georgia
,"Times New Roman",Times
,serif
;
25 h1
, h2
, h3
, h4
, h5
, h6
,
26 div
.title
, caption
.title
,
27 thead
, p
.table
.header
,
29 #author, #revnumber
, #revdate
, #revremark
,
31 font-family: Candara
,Arial
,sans-serif
;
34 a
.image
{ border-bottom: 0; }
37 border-bottom: 1px dotted
#999999;
38 color: #3A3A4D !important
;
39 text-decoration: none
!important
;
42 border-bottom: 1px solid
#6D4100;
43 color: #6D4100 !important
;
44 text-decoration: none
!important
;
46 a
{ color: #666688; text-decoration: none
; border-bottom: 1px dotted
#666688; }
47 a:visited
{ color: #615FA0; border-bottom: 1px dotted
#615FA0; }
48 a:hover
{ color: #6D4100; border-bottom: 1px solid
#6D4100; }
60 h1
, h2
, h3
, h4
, h5
, h6
{
65 letter-spacing:+0.15em;
68 h1
, h2
, h3
, h4
, h5
, h6
{
72 /* h1 { margin-left: 2em; } */
73 h2
{ margin-left: 2em; }
74 /* h3 { margin-left: 4em; } */
75 /* h4 { margin-left: 5em; } */
76 /* h5 { margin-left: 6em; } */
77 /* h6 { margin-left: 7em; } */
79 h2
{ border-bottom: 4px solid
#ccd; }
80 h3
{ border-bottom: 2px dotted
#ccd; }
81 /* h2, h3 { border-bottom: 2px solid #ccd; } */
82 /* h2 { padding-top: 0.5em; } */
83 /* h3 { float: left; } */
84 /* h3 + * { clear: left; } */
102 border: 1px solid
#444466;
109 margin-bottom: 0.5em;
129 border-top: 2px solid silver
;
146 margin-bottom: 1.5em;
149 div
.tableblock
, div
.imageblock
, div
.exampleblock
, div
.verseblock
,
150 div
.quoteblock
, div
.literalblock
, div
.listingblock
, div
.sidebarblock
,
151 div
.admonitionblock
{
153 margin-bottom: 1.5em;
156 div
.admonitionblock
{
158 margin-bottom: 2.5em;
161 #content { /* Block element content. */
165 /* Block element titles. */
166 div
.title
, caption
.title
{
171 margin-bottom: 0.5em;
177 td div
.title:first-child
{
180 div
.content div
.title:first-child
{
183 div
.content
+ div
.title
{
187 div
.sidebarblock
> div
.content
{
189 border: 1px solid silver
;
193 div
.listingblock
> div
.content
{
194 border: 1px solid silver
;
203 div
.quoteblock
> div
.attribution
{
212 div
.verseblock
> pre
.content
{
213 font-family: inherit
;
215 div
.verseblock
> div
.attribution
{
219 /* DEPRECATED: Pre version 8.2.7 verse style literal block. */
220 div
.verseblock
+ div
.attribution
{
224 div
.admonitionblock
.icon
{
228 text-decoration: underline
;
230 padding-right: 0.5em;
232 div
.admonitionblock td
.content
{
234 border-left: 2px solid silver
;
237 div
.exampleblock
> div
.content
{
238 border-left: 2px solid silver
;
242 div
.imageblock div
.content
{ padding-left: 0; }
243 span
.image img
{ border-style: none
; }
244 a
.image:visited
{ color: white
; }
248 margin-bottom: 0.8em;
261 list-style-position: outside
;
264 list-style-type: decimal
;
267 list-style-type: lower-alpha
;
270 list-style-type: upper-alpha
;
273 list-style-type: lower-roman
;
276 list-style-type: upper-roman
;
279 div
.compact ul
, div
.compact ol
,
280 div
.compact p
, div
.compact p
,
281 div
.compact div
, div
.compact div
{
283 margin-bottom: 0.1em;
286 div
.tableblock
> table
{
287 border: 3px solid
#444466;
302 /* Because the table frame attribute is overridden by CSS in most browsers. */
303 div
.tableblock
> table
[frame
="void"] {
306 div
.tableblock
> table
[frame
="hsides"] {
307 border-left-style: none
;
308 border-right-style: none
;
310 div
.tableblock
> table
[frame
="vsides"] {
311 border-top-style: none
;
312 border-bottom-style: none
;
318 margin-bottom: 0.8em;
321 padding-bottom: 15px;
323 dt
.hdlist1
.strong
, td
.hdlist1
.strong
{
329 padding-right: 0.8em;
335 div
.hdlist
.compact tr
{
345 #footer-badges { display: none
; }
353 margin-bottom: 0.1em;
356 div
.toclevel1
, div
.toclevel2
, div
.toclevel3
, div
.toclevel4
{ margin-top: 0; margin-bottom: 0; }
357 div
.toclevel1
{ margin-top: 0.3em; margin-left: 0; font-size: 1.0em; }
358 div
.toclevel2
{ margin-top: 0.25em; margin-left: 2em; font-size: 0.9em; }
359 div
.toclevel3
{ margin-left: 4em; font-size: 0.8em; }
360 div
.toclevel4
{ margin-left: 6em; font-size: 0.8em; }
367 .monospaced, tt, div.listingblock > div.content {
368 font-family: Consolas
, "Andale Mono", "Courier New", monospace
;
391 .paragraph p, li, dd, .content { max-width: 80em; }
392 .admonitionblock { max-width: 35em; }
394 div
.sectionbody div
.ulist
> ul
> li
{
395 list-style-type: square
;
398 div
.sectionbody div
.ulist
> ul
> li
> * {
404 div
.sectionbody div
.ulist
> ul
> li div
.ulist
> ul
> li
{
407 div
.sectionbody div
.ulist
> ul
> li div
.ulist
> ul
> li
> * {
412 font-style: normal
! important
;
413 font-weight: bold
! important
;
414 color: #662222 ! important
;
415 letter-spacing:+0.08em ! important
;
418 span
.underline
{ text-decoration: underline
; }
419 span
.overline
{ text-decoration: overline
; }
420 span
.line-through
{ text-decoration: line-through
; }
429 margin-bottom: 1.5em;
431 thead
, p
.tableblock
.header
{
442 border-color: #444466;
443 border-collapse: collapse
;
445 th
.tableblock
, td
.tableblock
{
449 border-color: #444466;
452 table
.tableblock
.frame-topbot
{
453 border-left-style: hidden
;
454 border-right-style: hidden
;
456 table
.tableblock
.frame-sides
{
457 border-top-style: hidden
;
458 border-bottom-style: hidden
;
460 table
.tableblock
.frame-none
{
461 border-style: hidden
;
464 th
.tableblock
.halign-left
, td
.tableblock
.halign-left
{
467 th
.tableblock
.halign-center
, td
.tableblock
.halign-center
{
470 th
.tableblock
.halign-right
, td
.tableblock
.halign-right
{
474 th
.tableblock
.valign-top
, td
.tableblock
.valign-top
{
477 th
.tableblock
.valign-middle
, td
.tableblock
.valign-middle
{
478 vertical-align: middle
;
480 th
.tableblock
.valign-bottom
, td
.tableblock
.valign-bottom
{
481 vertical-align: bottom
;
488 <script type=
"text/javascript">
490 var asciidoc
= { // Namespace.
492 /////////////////////////////////////////////////////////////////////
493 // Table Of Contents generator
494 /////////////////////////////////////////////////////////////////////
496 /* Author: Mihai Bazon, September 2002
497 * http://students.infoiasi.ro/~mishoo
499 * Table Of Content generator
502 * Feel free to use this script under the terms of the GNU General Public
503 * License, as long as you do not remove or alter this notice.
506 /* modified by Troy D. Hanson, September 2006. License: GPL */
507 /* modified by Stuart Rackham, 2006, 2009. License: GPL */
510 toc: function (toclevels
) {
512 function getText(el
) {
514 for (var i
= el
.firstChild
; i
!= null; i
= i
.nextSibling
) {
515 if (i
.nodeType
== 3 /* Node.TEXT_NODE */) // IE doesn't speak constants.
517 else if (i
.firstChild
!= null)
523 function TocEntry(el
, text
, toclevel
) {
526 this.toclevel
= toclevel
;
529 function tocEntries(el
, toclevels
) {
530 var result
= new Array
;
531 var re
= new RegExp('[hH]([1-'+(toclevels
+1)+'])');
532 // Function that scans the DOM tree for header elements (the DOM2
533 // nodeIterator API would be a better technique but not supported by all
535 var iterate = function (el
) {
536 for (var i
= el
.firstChild
; i
!= null; i
= i
.nextSibling
) {
537 if (i
.nodeType
== 1 /* Node.ELEMENT_NODE */) {
538 var mo
= re
.exec(i
.tagName
);
539 if (mo
&& (i
.getAttribute("class") || i
.getAttribute("className")) != "float") {
540 result
[result
.length
] = new TocEntry(i
, getText(i
), mo
[1]-1);
550 var toc
= document
.getElementById("toc");
555 // Delete existing TOC entries in case we're reloading the TOC.
556 var tocEntriesToRemove
= [];
558 for (i
= 0; i
< toc
.childNodes
.length
; i
++) {
559 var entry
= toc
.childNodes
[i
];
560 if (entry
.nodeName
.toLowerCase() == 'div'
561 && entry
.getAttribute("class")
562 && entry
.getAttribute("class").match(/^toclevel/))
563 tocEntriesToRemove
.push(entry
);
565 for (i
= 0; i
< tocEntriesToRemove
.length
; i
++) {
566 toc
.removeChild(tocEntriesToRemove
[i
]);
569 // Rebuild TOC entries.
570 var entries
= tocEntries(document
.getElementById("content"), toclevels
);
571 for (var i
= 0; i
< entries
.length
; ++i
) {
572 var entry
= entries
[i
];
573 if (entry
.element
.id
== "")
574 entry
.element
.id
= "_toc_" + i
;
575 var a
= document
.createElement("a");
576 a
.href
= "#" + entry
.element
.id
;
577 a
.appendChild(document
.createTextNode(entry
.text
));
578 var div
= document
.createElement("div");
580 div
.className
= "toclevel" + entry
.toclevel
;
581 toc
.appendChild(div
);
583 if (entries
.length
== 0)
584 toc
.parentNode
.removeChild(toc
);
588 /////////////////////////////////////////////////////////////////////
589 // Footnotes generator
590 /////////////////////////////////////////////////////////////////////
592 /* Based on footnote generation code from:
593 * http://www.brandspankingnew.net/archive/2005/07/format_footnote.html
596 footnotes: function () {
597 // Delete existing footnote entries in case we're reloading the footnodes.
599 var noteholder
= document
.getElementById("footnotes");
603 var entriesToRemove
= [];
604 for (i
= 0; i
< noteholder
.childNodes
.length
; i
++) {
605 var entry
= noteholder
.childNodes
[i
];
606 if (entry
.nodeName
.toLowerCase() == 'div' && entry
.getAttribute("class") == "footnote")
607 entriesToRemove
.push(entry
);
609 for (i
= 0; i
< entriesToRemove
.length
; i
++) {
610 noteholder
.removeChild(entriesToRemove
[i
]);
613 // Rebuild footnote entries.
614 var cont
= document
.getElementById("content");
615 var spans
= cont
.getElementsByTagName("span");
618 for (i
=0; i
<spans
.length
; i
++) {
619 if (spans
[i
].className
== "footnote") {
621 var note
= spans
[i
].getAttribute("data-note");
623 // Use [\s\S] in place of . so multi-line matches work.
624 // Because JavaScript has no s (dotall) regex flag.
625 note
= spans
[i
].innerHTML
.match(/\s*\[([\s\S]*)]\s*/)[1];
627 "[<a id='_footnoteref_" + n
+ "' href='#_footnote_" + n
+
628 "' title='View footnote' class='footnote'>" + n
+ "</a>]";
629 spans
[i
].setAttribute("data-note", note
);
631 noteholder
.innerHTML
+=
632 "<div class='footnote' id='_footnote_" + n
+ "'>" +
633 "<a href='#_footnoteref_" + n
+ "' title='Return to text'>" +
634 n
+ "</a>. " + note
+ "</div>";
635 var id
=spans
[i
].getAttribute("id");
636 if (id
!= null) refs
["#"+id
] = n
;
640 noteholder
.parentNode
.removeChild(noteholder
);
642 // Process footnoterefs.
643 for (i
=0; i
<spans
.length
; i
++) {
644 if (spans
[i
].className
== "footnoteref") {
645 var href
= spans
[i
].getElementsByTagName("a")[0].getAttribute("href");
646 href
= href
.match(/#.*/)[0]; // Because IE return full URL.
649 "[<a href='#_footnote_" + n
+
650 "' title='View footnote' class='footnote'>" + n
+ "</a>]";
656 install: function(toclevels
) {
659 function reinstall() {
660 asciidoc
.footnotes();
662 asciidoc
.toc(toclevels
);
666 function reinstallAndRemoveTimer() {
667 clearInterval(timerId
);
671 timerId
= setInterval(reinstall
, 500);
672 if (document
.addEventListener
)
673 document
.addEventListener("DOMContentLoaded", reinstallAndRemoveTimer
, false);
675 window
.onload
= reinstallAndRemoveTimer
;
682 <link rel=
"shortcut icon" type=
"image/x-icon" sizes=
"32x32" href=
"ladish-logo-32x32.ico" />
683 <link rel=
"icon" type=
"image/x-icon" sizes=
"32x32" href=
"ladish-logo-32x32.ico" />
684 <link rel=
"icon" type=
"image/x-icon" sizes=
"128x128" href=
"ladish-logo-128x128.png" />
685 <link rel=
"apple-touch-icon" type=
"image/x-icon" sizes=
"140x140" href=
"ladi-140x140.png" />
686 <link rel=
"apple-touch-icon" type=
"image/x-icon" sizes=
"128x128" href=
"ladish-logo-128x128.png" />
688 <body class=
"article">
691 <h1>(LADI) jackdbus
</h1>
693 <div id=
"toctitle">Table of Contents
</div>
694 <noscript><p><b>JavaScript must be enabled in your browser to display the table of contents.
</b></p></noscript>
699 <div class=
"sectionbody">
700 <div class=
"paragraph"><p><span class=
"image">
701 <a class=
"image" href=
"https://github.com/LADI/jackdbus/actions">
702 <img src=
"https://github.com/LADI/jackdbus/actions/workflows/build.yml/badge.svg" alt=
"Build status badge">
706 <a class=
"image" href=
"https://repology.org/metapackage/jack-audio-connection-kit/versions">
707 <img src=
"https://repology.org/badge/tiny-repos/jack-audio-connection-kit.svg" alt=
"Repology bandge">
713 <h2 id=
"_overview">Overview
</h2>
714 <div class=
"sectionbody">
715 <div class=
"paragraph"><p>This software implements D-Bus endpoint for JACK server.
</p></div>
719 <h2 id=
"_brief_history">Brief History
</h2>
720 <div class=
"sectionbody">
721 <div class=
"paragraph"><p>Initial version of
<a href=
"https://github.com/LADI/jackdbus">jackdbus
</a> was created
722 as part of LADI project and was ad-hoc modification of
<a href=
"https://jackdbus.ladish.org/jack1-design.html">JACK1
</a> <a href=
"https://github.com/jackaudio/jack1/">codebase
</a>.
723 jackdbus for JACK1 was maintained first as a setup of ad-hoc patches,
724 then via Mercural and then via Git.
725 In
2008/
2009, jackdbus was ported to jackdmp codebase along with an implementation
726 of the newly designed for the new need control API for JACK.
727 The result of this merge became known as
728 <a href=
"https://web.archive.org/web/20170106162202/http://lac.linuxaudio.org/2009/cdm/Thursday/01_Letz/01.pdf">JACK2
</a>.
729 As of
2022, jackdbus is again maintained in LADI project.
730 The jackaudio.org version of jackdbus is considered older/alternative
731 implementation.
</p></div>
732 <div class=
"paragraph"><p>For LADI specific issues, submit issues or pull request to LADI project.
733 For related discussions, you are invited to join
734 <a href=
"https://libera.chat/">Libera.Chat
</a> channel #ladi
</p></div>
735 <div class=
"admonitionblock">
738 <img alt=
"Important" src=
"data:image/png;base64,
739 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
791 EQn3XQAAAABJRU5ErkJggg==">
793 <td class=
"content">Do not submit LADI specific issues to jackaudio project.
</td>
799 <h2 id=
"_d_bus_access">D-Bus access
</h2>
800 <div class=
"sectionbody">
801 <div class=
"paragraph"><p>D-Bus is an object model that provides IPC mechanism.
802 D-Bus supports autoactivation of objects,
803 thus making it simple and reliable to code a
"single instance" application or daemon,
804 and to launch applications and daemons on demand when their services are needed.
</p></div>
805 <div class=
"paragraph"><p>Improvements over classical
"jackd" approach:
</p></div>
806 <div class=
"ulist"><ul>
809 Simplified single thread model for control and monitor
810 applications. Various D-Bus language bindings make it trivial to
811 write control and monitor applications using scripting languages
812 like Python, Ruby, Perl, etc..
817 A log file is available for inspection even when autoactivation
818 happens by the first launched JACK application.
823 A real configuration file is used to persist settings to be
824 manipulated through configuration interface of JACK D-Bus object.
829 Improved graph inspection and control mechanism. JACK graph is
830 versioned. Connections, ports and clients have unique
831 (monotonically increasing) numeric IDs.
836 High level abstraction of JACK settings. Allows applications that
837 can configure JACK to expose parameters that were not known at
838 compile (or tarball release) time. Recent real world examples are
839 the JACK MIDI driver parameters and support for FFADO driver in
840 QJackCtl. Upgrading of JACK requires upgrade of QJackCtl in order
841 to make new settings available in the GUI.
846 <h3 id=
"_how_it_works">How it works
</h3>
848 <h4 id=
"_autoactivation_and_starting_stopping_jack_server">Autoactivation and starting/stopping JACK server
</h4>
849 <div class=
"paragraph"><p>First, application that issues D-Bus method call to JACK controller object,
850 causes D-Bus session daemon to activate the object by starting the jackdbus executable.
851 Activating controller object does not start the server.
852 Instead controller object has several interfaces.
853 The most important of them is the control interface.
854 Control interface contains methods for starting and stopping JACK server,
855 loading and unloading of internal clients (netjack),
856 setting buffer size and resetting xrun counter.
857 It also contains methods for querying information required by monitoring
858 applications:
</p></div>
859 <div class=
"ulist"><ul>
862 whether JACK server is started
867 whether JACK server is running in realtime mode
896 <div class=
"paragraph"><p>JACK server autostart is achieved by libjack calling
"jack server start" method of
897 JACK control D-Bus interface.
</p></div>
900 <h4 id=
"_jack_settings">JACK settings
</h4>
901 <div class=
"paragraph"><p>Applications that want to manage JACK settings can query
902 and set all settings that were traditionally specified as
903 jackd command-line parameters.
904 Interface abstraction provides virtual tree of parameter
905 containers with container leaves that contain parameters.
906 Parameters are accessed using simple addressing scheme (array of strings)
907 where address defines path to parameter, like
"drivers",
"alsa",
"dither".
</p></div>
908 <div class=
"paragraph"><p>Overview of the tree of standard settings' addresses:
</p></div>
909 <div class=
"ulist"><ul>
927 "engine",
…more engine parameters
937 "driver",
…more driver parameters
942 "drivers",
"alsa",
"device"
947 "drivers",
"alsa",
…more alsa driver parameters
952 "drivers",
…more drivers
957 "internals",
"netmanager",
"multicast ip"
962 "internals",
"netmanager",
…more netmanager parameters
967 "internals",
…more internals
971 <div class=
"paragraph"><p>JACK settings are persisted.
972 I.e. they are automatically saved by jackdbus when they are set.
973 Next time user starts JACK server, last saved settings will be automatically used.
974 Changing JACK settings through the configure D-Bus interface takes effect on next
976 On the fly change of the buffer size, as available in the libjack
977 (jack.h) API, is also possible through the control D-Bus interface.
</p></div>
980 <h4 id=
"_jack_parameter_constraints">JACK parameter constraints
</h4>
981 <div class=
"paragraph"><p>JACK internal modules that provide parameters visible through control API can provide
982 information about parameter valid range (like realtime priority) or
983 whether parameter should be presented as enumeration.
984 Enumeration parameters can be strict and non-strict.
985 Example of strict enum parameter is dither parameter of ALSA driver,
986 it has only predefined valid values:
"shaped noise",
987 "rectangular",
"triangualr" and
"none".
</p></div>
988 <div class=
"paragraph"><p>Example of non-strict parameter is device parameter of ALSA driver.
989 It is useful to provide some detected device strings as choices to user,
990 but still allow user to specify custom string that ALSA layer is supposed to
991 understand.
</p></div>
994 <h4 id=
"_jack_patchbay">JACK patchbay
</h4>
995 <div class=
"paragraph"><p>In order to simplify patchbay applications, extended functionality is provided.
996 There is a method that returns the current graph state.
997 Graph state has unique monotonically increasing version number
998 and contains info about all clients, their ports and connections.
999 Connections, ports and clients have unique numeric IDs
1000 that are guaranteed not to be reused.
1001 Notifica tions about graph changes are provided using
1002 D-Bus signals.
</p></div>
1006 <h3 id=
"_jack_d_bus_enabled_applications">JACK D-Bus enabled applications
</h3>
1008 <h4 id=
"_jack_control">jack_control
</h4>
1009 <div class=
"paragraph"><p>JACK contains
"jack_control" executable,
<a href=
"https://gitea.ladish.org/LADI/jack_control/src/branch/main/jack_control.py">a
300 lines of Python
</a> exposing
1010 JACK D-Bus functionality. It allows chained execution of several commands.
1011 For example
"jack control ds alsa dps midi-driver raw eps realtime on
1012 eps relatime-priority 70 start" selects ALSA driver, enables JACK MIDI
1013 raw backend, enables realtime mode, sets realtime priority to
70 and starts
1014 JACK server.
</p></div>
1017 <h4 id=
"_ladi_tools">LADI Tools
</h4>
1018 <div class=
"paragraph"><p><a href=
"https://gitea.ladish.org/LADI/laditools">LADI Tools
</a> is a set of programs to configure, control and monitor JACK.
1019 It provides tray icon, Window Maker style dockapp,
1020 G15 keyboard LCD display integration application,
1021 configuration utility for managing JACK settings
1022 and log file monitor application.
</p></div>
1023 <div class=
"paragraph"><p>All tools are written in Python.
</p></div>
1026 <h4 id=
"_patchage">Patchage
</h4>
1027 <div class=
"paragraph"><p><a href=
"https://drobilla.net/software/patchage.html">Patchage
</a>, the ubiquitous canvas modular patch bay can be compiled to use
1028 D-Bus instead of libjack to communicate with JACK.
</p></div>
1029 <div class=
"paragraph"><p>Doing so also enables JACK server start/stop functionality in Patchage.
</p></div>
1030 <div class=
"paragraph"><p>Various JACK related features are implemented:
</p></div>
1033 <h4 id=
"_ladi_session_handler_ladish">LADI Session handler (LADISH)
</h4>
1034 <div class=
"paragraph"><p><a href=
"https://ladish.org/">LADISH
</a>, a rewrite of LASH session handler
1035 uses D-Bus to communicate with JACK.
</p></div>
1036 <div class=
"paragraph"><p>Various JACK related features are implemented:
</p></div>
1037 <div class=
"ulist"><ul>
1040 Saving of JACK settings as part of
"studio" session.
1045 Handling of
"JACK server crash" scenario: restarting JACK server,
1046 notifying JACK applications that JACK server reappeared so they
1047 can reconnect to it, and restoring JACK connections.
1053 <h4 id=
"_qjackctl_jack_audio_connection_kit_qt_gui_interface">QjackCtl JACK Audio Connection Kit - Qt GUI Interface
</h4>
1054 <div class=
"paragraph"><p><a href=
"https://qjackctl.sourceforge.io/">QjackCtl
</a> is a simple Qt application
1055 to control the JACK sound server daemon, is another jackdbus frontend.
</p></div>
1058 <h4 id=
"_kxstudio_cadence">KXStudio Cadence
</h4>
1059 <div class=
"paragraph"><p><a href=
"https://kx.studio/Applications:Cadence">Cadence
</a>, a set of tools
1060 useful for audio production, is another jackdbus frontend.
</p></div>
1063 <h4 id=
"_studio_controls">Studio Controls
</h4>
1064 <div class=
"paragraph"><p><a href=
"https://ovenwerks.github.io/studio-controls/">Studio Controls
</a>, a way to
1065 configure your Linux-based audio installation for real-time audio, is
1066 another jackdbus frontend.
</p></div>
1072 <h2 id=
"_source">Source
</h2>
1073 <div class=
"sectionbody">
1074 <div class=
"paragraph"><p>Tarballs:
</p></div>
1075 <div class=
"ulist"><ul>
1078 <a href=
"https://dl.ladish.org/jackdbus/">https://dl.ladish.org/jackdbus/ (signed) tarballs
</a>
1082 <div class=
"paragraph"><p>GIT repositories:
</p></div>
1083 <div class=
"ulist"><ul>
1086 <a href=
"https://gitea.ladish.org/LADI/jackdbus">Upstream development GIT repository
</a><br>
1087 Self-hosted upstream
1092 <a href=
"https://repo.or.cz/jackdbus.git">Primary backup GIT repository at repo.or.cz
</a><br>
1100 <h2 id=
"_packaging">Packaging
</h2>
1101 <div class=
"sectionbody">
1102 <div class=
"paragraph"><p><a href=
"https://jackdbus.ladish.org/packaging.html">Packaging HOWTO
</a></p></div>
1106 <h2 id=
"_references">References
</h2>
1107 <div class=
"sectionbody">
1108 <div class=
"olist arabic"><ol class=
"arabic">
1111 <a href=
"https://web.archive.org/web/20170106162202/http://lac.linuxaudio.org/2009/cdm/Thursday/01_Letz/01.pdf">What
’s new in JACK2?
</a>
1118 <div id=
"footnotes"><hr></div>
1120 <div id=
"footer-text">
1122 2024-
06-
13 19:
38:
05 EEST