I'm not starting by filing this as a bug as it encompasses a number of
issues and it's not clear where the problem really lies, so I thought
I'd start a discussion here first.
I posted on what I'm trying to do previously (in F13) here:
Basically I have a sound card, a guitar amplifier and a pair of
headphones on the front of my computer. I'd like to be able to have
the amp plugged into the back of the computer and hear the output
through the headphones with other sound (i.e. pulseaudio) still
working. Passthrough or monitoring the input if you like.
This is definitely possible, this is a real sound card and has a
hardware mixer. If I run alsa mixer, select the physical card and turn
on the AC97 mixer then the line-in gets mixed into the output. I'm
happy with that personally.
However it's really not obvious, and since the introduction of PA in
Fedora it hasn't been possible to easily access the hardware mixers
directly (as they're all hidden behind the PA device volume controls,
which also drive them in odd ways). I can see why that was done, and
it generally works okay now that drivers have been fixed (by card
initially had weird volume issues due to a driver issue), but now that
PA has matured we're still hiding one of the three functions of a
soundcard. (What can it do? It can play back, it can record, it can
pass through.) If the hardware capability is there then is should be
available, in some ways it's superior to anything discussed below. So
that's issue #1.
Someone will suggest I try module-loopback (see the email thread
referenced above and
). This has a latency of somewhere between .5 and 1s and the
latency_msec option doesn't seem to be able to reduce this. This makes
it unsuitable for musical use, to which you might say 'use jack' (see
a bit further down). However this isn't doing anything particularly
complex and what many people might see as a basic feature (see the
many references to module-loopback across the web) doesn't need the
extra complications of running JACK. I think this is an issue with
module-loopback, particularly as the other pulseaudio solution:
parec --latency-msec=1 | pacat --latency-msec=1
has lower latency (still noticeable, but < 1/2s, maybe 1/3rd)
It's still inferior to being able to employ the hardware mixer as that
doesn't require 10% CPU (on an Athlon 640). In addition, latency might
be acceptable for some other applications (e.g. a stereo or radio
going through the computer), but as you go to 1second even adjusting
volume on the source device becomes frustrating and, speaking of
volume, module-loopback doesn't really allow control of this easily.
For many applications access to the hardware mixer would be the best
solution. There are areas for which the pulseaudio loopback could be
useful, such as chaining a webcam microphone to the soundcard output,
but it's not universally suitable.
Finally JACK. This is an area which has improved. Back in F13 if I
wanted to include an effects loop rather than the pure passthrough
discussed above I had to:
1. Load qjackctl, get ready to hit start
2. run pulseaudio -k
3. Start jack
4. Load module-jack-source and module-jack-sink
5. The join up whatever path I wanted for the signal chain.
This tended to crash, it seems more stable now (stable enough that I
can use it as an alternative loopback too), so kudos to the people
working on that. However the setup is a bit convoluted, and it seems a
pity the module-jackdbus-detect isn't available (or doesn't work as it
might help avoid the juggling needed:
pactl load-module module-jackdbus-detect
Failure: Module initalization failed
However, as I've noted, jack is not really the solution for simple
passthrough which should be possible with just hardware control.
Any thoughts, particularly suggestions as to how the hardware mixer
and module-loopback issues might be formulated productively as bugs
devel mailing list