Difference between revisions of "Jack"
From Rivendell Wiki
(Created.) |
(Add some structure, and add a sample jack-plumbing configuration file.) |
||
Line 1: | Line 1: | ||
+ | The [https://jackaudio.org/ Jack Audio Connection Kit] (JACK) is a suite of professional, low-latency tools for routing digital audio. | ||
+ | |||
== Configure Rivendell 3 For Use With Jack == | == Configure Rivendell 3 For Use With Jack == | ||
− | + | === Overview === | |
− | + | In 2020, Rivendell processes and JACK processes must be run as the same user ID. And since Rivendell processes (in the packaged version available from [[Paravel Systems - USA|Paravel Systems]]) '''''always''''' run as ''root'', this means ''jackd''(8) (the JACK daemon) must also run as ''root''. | |
− | + | === Configuring Rivendell to use JACK === | |
+ | |||
+ | So, you’ve decided to use JACK for your Rivendell audio. First, make sure you tell Rivendell to '''not''' use any ALSA devices on your computer using the [[RDAlsaConfig]] Rivendell app. Run this app from the Rivendell menu and simply unhighlight all devices in the list, as shown here: | ||
+ | |||
+ | [[Image:RDAlsaConfig-no-selections.png|center|400px|thumb|border|RDAlsaConfig Ready for JACK]] | ||
+ | |||
+ | :(As an aside, when you use JACK for Rivendell’s audio routing, you can also use any other [https://jackaudio.org/applications/ JACK-enabled audio app] alonside Rivendell.) | ||
+ | |||
+ | Set up JACK on a per-host basis by modifying the configuration in [[RDAdmin]]->[[RDAdmin#Manage_Hosts|Manage Hosts]]->''hostname''. In the host configuration window, touch the '''JACK Settings''' button to manage the Jack settings. | ||
+ | |||
+ | Ensure that Rivendell starts the JACK app by checking the '''Start JACK Server''' checkbox. Leave the '''JACK Server Name''' set to ''(default)'' as shown here: | ||
+ | |||
+ | [[Image:Jack-clients-3.4.1.png|center|thumb|440px|border|Configured JACK Clients in Reivendell 3.4.1]] | ||
+ | |||
+ | <div style="clear: both"></div> | ||
− | + | It is easiest to set the '''JACK Command Line''' to the full path of a shell script so you can make changes to the way in which the JACK app is started. Here is an example JACK startup script: | |
<nowiki> | <nowiki> | ||
Line 39: | Line 55: | ||
When using the above script, notice that we initialize JACK with a ''“dummy“'' device. We do this because the default device name is always ''“system”''. Not only is this a useless name, it is also not something one can change without editing the JACK source code. In the script, we assign the ''“dummy”'' device to the ''“system”'' JACK client in order to “get it out of the way”. | When using the above script, notice that we initialize JACK with a ''“dummy“'' device. We do this because the default device name is always ''“system”''. Not only is this a useless name, it is also not something one can change without editing the JACK source code. In the script, we assign the ''“dummy”'' device to the ''“system”'' JACK client in order to “get it out of the way”. | ||
− | + | ==== Adding JACK Clients ==== | |
+ | |||
+ | After configuring Rivendell to start the jack subsystem, you probably need to also start some JACK clients. Do this by adding each one in the '''JACK Clients to Start''' section (see the figure above for examples). | ||
You may want to use the ''[https://github.com/opensourceradio/ram/blob/master/usr/local/bin/pmw-jack-setup pmw-jack-setup]'' script (or something like it) to configure your ALSA sound devices to work with JACK. This script accepts two parameters: the name of the ALSA device to configure, and the “human-readable” name of the JACK client. You can learn your ALSA device names by running the command <tt>sudo aplay -l</tt> (or <tt>su - root -c 'aplay -l'</tt>) in a terminal window. Running this command results in output like: | You may want to use the ''[https://github.com/opensourceradio/ram/blob/master/usr/local/bin/pmw-jack-setup pmw-jack-setup]'' script (or something like it) to configure your ALSA sound devices to work with JACK. This script accepts two parameters: the name of the ALSA device to configure, and the “human-readable” name of the JACK client. You can learn your ALSA device names by running the command <tt>sudo aplay -l</tt> (or <tt>su - root -c 'aplay -l'</tt>) in a terminal window. Running this command results in output like: | ||
Line 54: | Line 72: | ||
In the above output, the device name for ''card 0'' is <tt>Intel</tt>. Many people prefer more appropriate names for their JACK devices. One common name for the built-in sound device (the “sound card” on the PC‘s motherboard) is ''“Onboard”''. Set up your first '''JACK Client''' in '''RDAdmin''' as follows: | In the above output, the device name for ''card 0'' is <tt>Intel</tt>. Many people prefer more appropriate names for their JACK devices. One common name for the built-in sound device (the “sound card” on the PC‘s motherboard) is ''“Onboard”''. Set up your first '''JACK Client''' in '''RDAdmin''' as follows: | ||
− | |||
− | |||
:* touch '''Add''' | :* touch '''Add''' | ||
Line 61: | Line 77: | ||
:* enter the path and parameters to the setup script: <tt>/usr/local/bin/pmw-jack-setup Intel Onboard</tt> in the '''Command Line''' text box | :* enter the path and parameters to the setup script: <tt>/usr/local/bin/pmw-jack-setup Intel Onboard</tt> in the '''Command Line''' text box | ||
:* touch '''OK''' to save your settings | :* touch '''OK''' to save your settings | ||
− | |||
− | |||
Repeat the above steps for as many ALSA-compatible hardware audio devices as you want to use with Rivendell. Note that ''pmw-jack-setup'' merely configures your hardware audio devices for use with JACK. It does not connect them to Rivendell. | Repeat the above steps for as many ALSA-compatible hardware audio devices as you want to use with Rivendell. Note that ''pmw-jack-setup'' merely configures your hardware audio devices for use with JACK. It does not connect them to Rivendell. | ||
+ | |||
+ | ==== Connecting JACK Inputs and Outputs ==== | ||
Once you have successfully configured Rivendell to launch JACK and configure your audio devices, you need to “connect” the devices to Rivendell. There are several ways to do this, including: | Once you have successfully configured Rivendell to launch JACK and configure your audio devices, you need to “connect” the devices to Rivendell. There are several ways to do this, including: | ||
− | :* run one or more Rivendell [ | + | :* run one or more Rivendell [http://opsguide.rivendellaudio.org/html/chapter.rml.html Macros] to make the connections (see [http://opsguide.rivendellaudio.org/html/sect.rml.commands.html#sect.rml.connect_jack_ports__jc_ JC]) |
:* run a JACK plumbing service daemon such as ''jack-plumbing'' to automate the connections | :* run a JACK plumbing service daemon such as ''jack-plumbing'' to automate the connections | ||
:* run the command line ''jack_connect'' application to make the connections | :* run the command line ''jack_connect'' application to make the connections | ||
Line 74: | Line 90: | ||
The most reliable methods for making JACK connections are those that perform the work automatically and in the background. Unfortunately, CentOS does not package the ''jack-plumbing'' command, so one must either download the source code from the [[wikipedia:Debian_Linux|Debian]] website: [http://deb.debian.org/debian/pool/main/j/jack-tools/jack-tools_20131226.orig.tar.bz2 here] or [http://deb.debian.org/debian/pool/main/j/jack-tools/jack-tools_20131226-1.debian.tar.gz here] and compile it (the original source code for ''jack-plumbing'' seems to have been lost in the bit bucket), or choose a different “plumbing” tool to manage the JACK connections. | The most reliable methods for making JACK connections are those that perform the work automatically and in the background. Unfortunately, CentOS does not package the ''jack-plumbing'' command, so one must either download the source code from the [[wikipedia:Debian_Linux|Debian]] website: [http://deb.debian.org/debian/pool/main/j/jack-tools/jack-tools_20131226.orig.tar.bz2 here] or [http://deb.debian.org/debian/pool/main/j/jack-tools/jack-tools_20131226-1.debian.tar.gz here] and compile it (the original source code for ''jack-plumbing'' seems to have been lost in the bit bucket), or choose a different “plumbing” tool to manage the JACK connections. | ||
+ | |||
+ | Here is an example of a configuration file for ''jack-plumbing''. Note that the “comment character” is a semicolon (“;”) rather than the more common hash symbol (“#”). In general, the ''jack-plumbing'' '''''connect''''' statement format is <tt>(connect "source" "destination")</tt>. If you place this in ''/etc/jack-plumbing'' you can start the app with simply ''/bin/jack-plumbing'' (see the figure above): | ||
+ | |||
+ | <nowiki> | ||
+ | ; JACK port connection rules. | ||
+ | ; See man jack-plumbing for details. | ||
+ | ; dklann@broadcasttool.com, Fri Aug 14 09:20:55 PDT 2020 | ||
+ | |||
+ | ; Connect the first Rivendell output port to the Onboard card. | ||
+ | ; See also pmw-jack-setup and the JACK client name for the | ||
+ | ; built-in audio device. Substitute your audio device for | ||
+ | ; "Onboard" as necessary... | ||
+ | (connect "rivendell_0:playout_0L" "Onboard:playback_1") | ||
+ | (connect "rivendell_0:playout_0R" "Onboard:playback_2") | ||
+ | |||
+ | ; Connect the first Rivendell input port to the Onboard card. | ||
+ | (connect "Onboard:capture_1" "rivendell_0:record_0L") | ||
+ | (connect "Onboard:capture_2" "rivendell_0:record_0R") | ||
+ | |||
+ | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | ||
+ | ; Audio processing with Calf plugins | ||
+ | ; Use this along with calfjackhost to connect some Calf audio | ||
+ | ; plugins for real-time audio processing. | ||
+ | ; | ||
+ | ; Rivendell Primary output to BassEnhancer | ||
+ | ;(connect "rivendell_0:playout_0L" "calf:bassenhancer_in_l") | ||
+ | ;(connect "rivendell_0:playout_0R" "calf:bassenhancer_in_r") | ||
+ | ; -or- Rivendell Primary output to MultibandCompressor input | ||
+ | ;(connect "rivendell_0:playout_0L" "calf:multibandcompressor_in_l") | ||
+ | ;(connect "rivendell_0:playout_0R" "calf:multibandcompressor_in_r") | ||
+ | ; MultibandCompressor output to Limiter input | ||
+ | ;(connect "calf:multibandcompressor_out_l" "calf:multibandlimiter_in_l") | ||
+ | ;(connect "calf:multibandcompressor_out_r" "calf:multibandlimiter_in_r") | ||
+ | |||
+ | ; BassEnhancer output to MultibandCompressor input | ||
+ | ;(connect "calf:bassenhancer_out_l" "calf:multibandcompressor_in_l") | ||
+ | ;(connect "calf:bassenhancer_out_r" "calf:multibandcompressor_in_r") | ||
+ | |||
+ | ; MultibandCompressor output to MultibandLimiter input | ||
+ | ;(connect "calf:multibandcompressor_out_l" "calf:multibandlimiter_in_l") | ||
+ | ;(connect "calf:multibandcompressor_out_r" "calf:multibandlimiter_in_r") | ||
+ | |||
+ | ; MultibandLimiter output to Onboard input | ||
+ | ;(connect "calf:multibandlimiter_out_l" "Onboard:playback_1") | ||
+ | ;(connect "calf:multibandlimiter_out_r" "Onboard:playback_2") | ||
+ | |||
+ | ; Limiter output to glasscoder input | ||
+ | ; This assumes you are running GlassCoder with the JACK | ||
+ | ; client name "glass". | ||
+ | ;(connect "calf:multibandlimiter_out_l" "glass:input_1") | ||
+ | ;(connect "calf:multibandlimiter_out_r" "glass:input_2") | ||
+ | |||
+ | </nowiki> | ||
+ | |||
+ | === Restart Rivendell Service === | ||
+ | |||
+ | After making changes to your JACK configuration in Rivendell you must restart the Rivendell service. Do this by either rebooting your Rivendell computer, or running the following command in a terminal window: | ||
+ | |||
+ | <nowiki> | ||
+ | sudo systemctl restart rivendell.service | ||
+ | </nowiki> | ||
+ | |||
+ | == Future Work == | ||
Note that in mid 2020 the [https://pipewire.org/ pipewire] audio subsystem is maturing and aims to be compatible with and to eventually replace both the [https://www.freedesktop.org/wiki/Software/PulseAudio/ pulseaudio] and the [https://jackaudio.org/ JACK] audio systems. Pipewire may include more “plumbing” tools over the long run. | Note that in mid 2020 the [https://pipewire.org/ pipewire] audio subsystem is maturing and aims to be compatible with and to eventually replace both the [https://www.freedesktop.org/wiki/Software/PulseAudio/ pulseaudio] and the [https://jackaudio.org/ JACK] audio systems. Pipewire may include more “plumbing” tools over the long run. |
Revision as of 19:39, 17 August 2020
The Jack Audio Connection Kit (JACK) is a suite of professional, low-latency tools for routing digital audio.
Contents
Configure Rivendell 3 For Use With Jack
Overview
In 2020, Rivendell processes and JACK processes must be run as the same user ID. And since Rivendell processes (in the packaged version available from Paravel Systems) always run as root, this means jackd(8) (the JACK daemon) must also run as root.
Configuring Rivendell to use JACK
So, you’ve decided to use JACK for your Rivendell audio. First, make sure you tell Rivendell to not use any ALSA devices on your computer using the RDAlsaConfig Rivendell app. Run this app from the Rivendell menu and simply unhighlight all devices in the list, as shown here:
- (As an aside, when you use JACK for Rivendell’s audio routing, you can also use any other JACK-enabled audio app alonside Rivendell.)
Set up JACK on a per-host basis by modifying the configuration in RDAdmin->Manage Hosts->hostname. In the host configuration window, touch the JACK Settings button to manage the Jack settings.
Ensure that Rivendell starts the JACK app by checking the Start JACK Server checkbox. Leave the JACK Server Name set to (default) as shown here:
It is easiest to set the JACK Command Line to the full path of a shell script so you can make changes to the way in which the JACK app is started. Here is an example JACK startup script:
#!/bin/sh ####################################################################### ## ## This script is started by Rivendell caed when the Rivendell daemons ## are launched. The script assumes a "default" Rivendell installation ## with the username 'rd' automatically logged in and running the ## windowing system. ## ## Change the JACK sample rate to match your Rivendell sample rate ## set in RDAdmin->System Settings. ## ####################################################################### export LANG=en_US.UTF-8 export TERM=xterm export QTDIR=/usr/lib64/qt4 export PATH=/sbin:/bin:/usr/bin:/usr/sbin:/usr/local/sbin:/usr/local/bin:/home/rd/bin export XDG_DATA_DIRS=/usr/local/share/:/usr/share/ export XDG_RUNTIME_DIR=/run/user/1000 export QT_GRAPHICSSYSTEM_CHECKED=1 exec /usr/bin/jackd --name default -d dummy -r 48000 2>&1 > /var/tmp/jackd.log
Copy the above text and save it in a file named /usr/local/bin/jackd-start. Make the file executable with sudo chmod +x /usr/local/bin/jackd-start. Enter the full path of the shell script into the JACK Command Line text box.
When using the above script, notice that we initialize JACK with a “dummy“ device. We do this because the default device name is always “system”. Not only is this a useless name, it is also not something one can change without editing the JACK source code. In the script, we assign the “dummy” device to the “system” JACK client in order to “get it out of the way”.
Adding JACK Clients
After configuring Rivendell to start the jack subsystem, you probably need to also start some JACK clients. Do this by adding each one in the JACK Clients to Start section (see the figure above for examples).
You may want to use the pmw-jack-setup script (or something like it) to configure your ALSA sound devices to work with JACK. This script accepts two parameters: the name of the ALSA device to configure, and the “human-readable” name of the JACK client. You can learn your ALSA device names by running the command sudo aplay -l (or su - root -c 'aplay -l') in a terminal window. Running this command results in output like:
**** List of PLAYBACK Hardware Devices **** card 0: Intel [HDA Intel], device 0: CX20561 Analog [CX20561 Analog] Subdevices: 0/1 Subdevice #0: subdevice #0 card 0: Intel [HDA Intel], device 1: CX20561 Digital [CX20561 Digital] Subdevices: 1/1 Subdevice #0: subdevice #0
In the above output, the device name for card 0 is Intel. Many people prefer more appropriate names for their JACK devices. One common name for the built-in sound device (the “sound card” on the PC‘s motherboard) is “Onboard”. Set up your first JACK Client in RDAdmin as follows:
- touch Add
- enter a meaningful description in the Description text box
- enter the path and parameters to the setup script: /usr/local/bin/pmw-jack-setup Intel Onboard in the Command Line text box
- touch OK to save your settings
Repeat the above steps for as many ALSA-compatible hardware audio devices as you want to use with Rivendell. Note that pmw-jack-setup merely configures your hardware audio devices for use with JACK. It does not connect them to Rivendell.
Connecting JACK Inputs and Outputs
Once you have successfully configured Rivendell to launch JACK and configure your audio devices, you need to “connect” the devices to Rivendell. There are several ways to do this, including:
The most reliable methods for making JACK connections are those that perform the work automatically and in the background. Unfortunately, CentOS does not package the jack-plumbing command, so one must either download the source code from the Debian website: here or here and compile it (the original source code for jack-plumbing seems to have been lost in the bit bucket), or choose a different “plumbing” tool to manage the JACK connections.
Here is an example of a configuration file for jack-plumbing. Note that the “comment character” is a semicolon (“;”) rather than the more common hash symbol (“#”). In general, the jack-plumbing connect statement format is (connect "source" "destination"). If you place this in /etc/jack-plumbing you can start the app with simply /bin/jack-plumbing (see the figure above):
; JACK port connection rules. ; See man jack-plumbing for details. ; dklann@broadcasttool.com, Fri Aug 14 09:20:55 PDT 2020 ; Connect the first Rivendell output port to the Onboard card. ; See also pmw-jack-setup and the JACK client name for the ; built-in audio device. Substitute your audio device for ; "Onboard" as necessary... (connect "rivendell_0:playout_0L" "Onboard:playback_1") (connect "rivendell_0:playout_0R" "Onboard:playback_2") ; Connect the first Rivendell input port to the Onboard card. (connect "Onboard:capture_1" "rivendell_0:record_0L") (connect "Onboard:capture_2" "rivendell_0:record_0R") ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; Audio processing with Calf plugins ; Use this along with calfjackhost to connect some Calf audio ; plugins for real-time audio processing. ; ; Rivendell Primary output to BassEnhancer ;(connect "rivendell_0:playout_0L" "calf:bassenhancer_in_l") ;(connect "rivendell_0:playout_0R" "calf:bassenhancer_in_r") ; -or- Rivendell Primary output to MultibandCompressor input ;(connect "rivendell_0:playout_0L" "calf:multibandcompressor_in_l") ;(connect "rivendell_0:playout_0R" "calf:multibandcompressor_in_r") ; MultibandCompressor output to Limiter input ;(connect "calf:multibandcompressor_out_l" "calf:multibandlimiter_in_l") ;(connect "calf:multibandcompressor_out_r" "calf:multibandlimiter_in_r") ; BassEnhancer output to MultibandCompressor input ;(connect "calf:bassenhancer_out_l" "calf:multibandcompressor_in_l") ;(connect "calf:bassenhancer_out_r" "calf:multibandcompressor_in_r") ; MultibandCompressor output to MultibandLimiter input ;(connect "calf:multibandcompressor_out_l" "calf:multibandlimiter_in_l") ;(connect "calf:multibandcompressor_out_r" "calf:multibandlimiter_in_r") ; MultibandLimiter output to Onboard input ;(connect "calf:multibandlimiter_out_l" "Onboard:playback_1") ;(connect "calf:multibandlimiter_out_r" "Onboard:playback_2") ; Limiter output to glasscoder input ; This assumes you are running GlassCoder with the JACK ; client name "glass". ;(connect "calf:multibandlimiter_out_l" "glass:input_1") ;(connect "calf:multibandlimiter_out_r" "glass:input_2")
Restart Rivendell Service
After making changes to your JACK configuration in Rivendell you must restart the Rivendell service. Do this by either rebooting your Rivendell computer, or running the following command in a terminal window:
sudo systemctl restart rivendell.service
Future Work
Note that in mid 2020 the pipewire audio subsystem is maturing and aims to be compatible with and to eventually replace both the pulseaudio and the JACK audio systems. Pipewire may include more “plumbing” tools over the long run.