[pulseaudio-discuss] Sound recording/routing issues on Librem5

Tanu Kaskinen tanuk at iki.fi
Wed Dec 4 21:25:28 UTC 2019


On Wed, 2019-12-04 at 11:47 -0700, Angus Ainslie wrote:
> Hi Tanu,
> 
> On 2019-12-02 08:49, Angus Ainslie wrote:
> > Hi Tanu,
> > 
> > On 2019-11-30 12:02, Tanu Kaskinen wrote:
> > > On Thu, 2019-11-28 at 16:44 -0700, Angus Ainslie wrote:
> > > > Hi,
> > > > 
> > > > The modem sink is passing audio so that's good. The issue with the 
> > > > sink
> > > > is there is about 3 seconds of latency. I can see ~1 second of that 
> > > > due
> > > > to the cellular network.
> > > > 
> > > > How would I check the latency through pulseaudio ?
> > > 
> > > I assume you use module-loopback to route the modem audio to the phone
> > > speakers. I use module-loopback to route audio from an electric piano
> > > to the computer speakers (actually just USB sound card input to the
> > > same card's output), so I can explain how I would check the loopback
> > > latency in my case:
> > > 
> > > $ pactl list source-outputs
> > > Source Output #11
> > > 	Driver: module-loopback.c
> > >         [...]
> > > 	Buffer Latency: 0 usec
> > > 	Source Latency: 0 usec
> > > 	[...]
> > > 	Properties:
> > > 		[...]
> > > 		media.name = "Loopback to PreSonus AudioBox iTwo Analog
> > > Stereo"
> > > 		[...]
> > > 
> > > So here we see that I have a recording stream created by module-
> > > loopback with zero latency from the source and zero internal latency.
> > > 
> > > $ pactl list sink-inputs
> > > Sink Input #959
> > > 	Driver: module-loopback.c
> > >         [...]
> > > 	Buffer Latency: 12607 usec
> > > 	Sink Latency: 15778 usec
> > > 	[...]
> > > 	Properties:
> > > 		[...]
> > > 		media.name = "Loopback from PreSonus AudioBox iTwo
> > > Analog Stereo"
> > > 		[...]
> > > 
> > > Here we see that I have a playback stream created by module-loopback
> > > with 15.8 ms latency from the sink and 12.6 ms internal latency. So 
> > > far
> > > 28.4 ms in total.
> > > 
> > > What these commands don't show is the latency introduced by module-
> > > loopback's internal buffer. The fill level of that buffer is not
> > > currently shown anywhere. However, the module arguments show what 
> > > total
> > > latency the loopback is trying to achieve:
> > > 
> > > $ pactl list modules
> > > Module #41
> > > 	Name: module-loopback
> > > 	Argument:
> > > source=alsa_input.usb-PreSonus_PreSonus_AudioBox_iTwo_AB5C18071273-00.analog-stereo
> > > sink=alsa_output.usb-PreSonus_PreSonus_AudioBox_iTwo_AB5C18071273-00.analog-stereo
> > > latency_msec=10 adjust_time=0
> > > 	Usage counter: n/a
> > > 	Properties:
> > > 		module.author = "Pierre-Louis Bossart"
> > > 		module.description = "Loopback from source to sink"
> > > 		module.version = "13.0-8-gd72a3"
> > > 
> > > The module is loaded with argument "latency_msec=10", and that target
> > > apparently isn't being met (this is interesting news to me!). 10 ms is
> > > probably unnecessarily low target, since I haven't noticed while
> > > playing that the piano would have too high latency. In any case, since
> > > I care about latency more than avoiding dropouts, I should use the
> > > "max_latency_msec" argument instead (new in PulseAudio 13.0).
> > > "latency_msec" relaxes the initial target if there are buffer
> > > underruns, but "max_latency_msec" sets a hard ceiling for the total
> > > latency.
> > > 
> > > I hope this helps. 3 seconds of latency sounds weird, because even if
> > > you don't configure any latency with module-loopback, the default
> > > latency isn't that high. The latency handling in module-loopback was
> > > very bad prior to 11.0, but I hope you're not using that old
> > > PulseAudio.
> > > 
> > > Your modem seems to have a fixed latency of 100 ms (maybe you've set
> > > tched=0?), which sounds a bit high for something that is used for call
> > > audio.
> > 
> > Dropping the alternate rate caused pulse audio to use 48K which
> > allowed the sound to flow through the loopbacks and the latency
> > disappeared at the same time.
> > 
> 
> So it didn't actually disappear I was just getting too good at my 
> testing cycle and was answering calls as quickly as they came in.
> 
> Whats causing the latency is that the audio starts recording as soon as 
> the call is placed and gets buffered until that call connects. Once the 
> call connects there  are x seconds ( however long it took to pick up the 
> call ) of audio buffered that starts playing out.
> 
> So I need to figure out how to drop that audio until the call connects.
> 
> If we were using pulseaudio 13 your suggestion sounds like a great idea. 
> As we're using PA 12 I'm going to see if I can adjust the buffers and 
> latency_msec to get rid of it.

I suspect you're going to need this patch, which is included in
PulseAudio 13:
https://gitlab.freedesktop.org/pulseaudio/pulseaudio/commit/e794d0a21af24ae3d2afae000ad67b17ef56ada2

The latency_msec option won't prevent the buffer from growing if the
sink isn't consuming the data that the source is producing.

-- 
Tanu

https://www.patreon.com/tanuk
https://liberapay.com/tanuk



More information about the pulseaudio-discuss mailing list