[Jack-Devel] Jack Problems

Holger Marzen holger at marzen.de
Sat Mar 23 09:32:47 CET 2019


On Fri, 22 Mar 2019, liebrecht at grossmann-venter.com wrote:

> Holger, I have a question regarding your very good instructions below.
> 
> As far as I know Alsa handles all the 1818VSL and other USB interface
> connections..
> How is that going to influence my abilty to use audio interfaces as now alsa
> wont be able to access the usb ports directly when I follow the link advice
> you included in your message. If I understand it right

ALSA has "2 levels": The low level stuff, "the driver", and high level
stuff "the API for clients".

If you have an USB interface then jackd uses the ALSA driver, iow
"backend": jackd -dalsa ...

Without Pulseaudio you can redirect ALSA clients to jackd via
~./asoundrc or system wide files:

-- snip ---
pcm.!default {
    type plug
    slave { pcm "rawjack" }
}

pcm.rawjack {
    type jack
    playback_ports {
        0 system:playback_1
        1 system:playback_2
    }
    capture_ports {
        0 system:capture_1
        1 system:capture_2
    }
}

pcm.jack {
    type plug
    slave { pcm "rawjack" }
    hint {
    description "JACK Audio Connection Kit"
    }
}
-- snap --

So jackd can "own" the card and ALSA-clients can use the ALSA-API.

When Pulseaudio is installed there will be a similar redirection
installed, systemwide. All ALSA-clients are redirected to Pulseaudio.
If Pulseaudio outputs to jackd then all clients can output their sound.

jack-client -> jackd -> audio interface
pulseaudio-client -> Pulseaudio -> jackd -> audio interface
ALSA-client -> Pulseaudio -> jackd -> audio interface

You have all the benefits and you can record the sound of Youtube videos
or SoundClout with Audacity if you choose the correct jackd-port.

You can even have several jack_thru instances to have "fixpoints" where
you can tap the signal.

I run a jack_thru named "main" (1st arg) as central point where I can
tap the signal. Here an example with a running Qtractor:

http://marzen.de/tmp/jack_flow_simple.png

This way I have ALWAYS that central point regardless if and how many
audio applications are running.

To maintain the connections of started applications I have jack-plumbing
active with the following ruleset ~/.jack-plumbing
As you can see in the last lines: Whenever I start ebumeter it gets
automagically connection to "main" (a jack_thru instance) and processes
every client's audio since every client will be redirected to "main".

If you have more questions that might not be of interest for the whole
mailing list you can email me directly.

My other PC in the home studio has a more complicated setup since I use
2 jackd instances: one with a big latency for Qtractor sessions and one
with a small latency for Guitarix, which sends its analog output to the
first.

-- snip --
(connect "main:output_1" "system:playback_1")
(connect "main:output_2" "system:playback_2")
(disconnect "system:capture_.*" "main:input_.*")

(connect    "alsa-jack\..*jackP\..*:out_000" "main:input_1")
(connect    "alsa-jack\..*jackP\..*:out_001" "main:input_2")
(disconnect "alsa-jack\..*jackP\..*:out_.*" "system:playback_.*")

(connect    "Clementine:out_jackaudiosink-.*_1" "main:input_1")
(connect    "Clementine:out_jackaudiosink-.*_2" "main:input_2")
(disconnect "Clementine:out_jackaudiosink-.*" "system:playback_.*")

(connect    "Qtractor:Master/out_1" "main:input_1")
(connect    "Qtractor:Master/out_2" "main:input_2")
(disconnect "Qtractor:Master/out_.*" "system:playback_.*")

(connect    "ardour:Master/audio_out 1" "main:input_1")
(connect    "ardour:Master/audio_out 2" "main:input_2")
(disconnect "ardour:Master/audio_out.*" "system:playback_.*")

(connect    "MPlayer.*:out_0" "main:input_1")
(connect    "MPlayer.*:out_1" "main:input_2")
(disconnect "MPlayer.*:out_.*" "system:playback_.*")

(connect    "PortAudio:out_.*[13579]" "main:input_2")
(connect    "PortAudio:out_.*[02468]" "main:input_1")
(disconnect "PortAudio:out_.*" "system:playback_.*")

(connect    "PulseAudio.*:front-left"  "main:input_1")
(connect    "PulseAudio.*:front-right" "main:input_2")
(disconnect "PulseAudio.*:.*" "system:playback_.*")

(connect "netjack:capture_1" "main:input_1")
(connect "netjack:capture_2" "main:input_2")

(connect "main:output_1" "ebumeter:in.L")
(connect "main:output_2" "ebumeter:in.R")
-- snap --



More information about the Jackaudio mailing list