[pulseaudio-discuss] Toslink capture looback latency problem

Georg Chini georg at chini.tk
Tue Jan 30 07:13:14 UTC 2018

On 30.01.2018 03:08, NicoHood wrote:
> On 01/29/2018 07:48 PM, Georg Chini wrote:
>> On 29.01.2018 19:39, NicoHood wrote:
>>> On 01/29/2018 07:19 PM, Georg Chini wrote:
>>>> On 29.01.2018 18:46, Nico wrote:
>>>>> On 01/29/2018 03:52 PM, NicoHood wrote:
>>>>>> On 01/29/2018 03:29 PM, Georg Chini wrote:
>>>>>>> On 29.01.2018 14:44, NicoHood wrote:
>>>>>>>> On 01/29/2018 01:39 PM, Georg Chini wrote:
>>>>>>>>> On 29.01.2018 12:52, Nico wrote:
>>>>>>>>>> Hi,
>>>>>>>>>> I want to capture the audio stream of my TV with my PCI-E Toslink
>>>>>>>>>> sound
>>>>>>>>>> card and play it back on my usb XLR soundcard. The reason why I
>>>>>>>>>> do that
>>>>>>>>>> is to use my own music boxes rather than the TV speakers. With
>>>>>>>>>> toslink +
>>>>>>>>>> XLR I do not have problems with ground loops etc.
>>>>>>>>>> I am using the pulseaudio loopback module with its default
>>>>>>>>>> configuration. The problem is, that the delay between picture and
>>>>>>>>>> sound
>>>>>>>>>> is about one second off, and the longer I wait, the more delay it
>>>>>>>>>> gets
>>>>>>>>>> (30 seconds and more). It is no usable like this.
>>>>>>>>>> I tried to play with the latencies of source, sink and the tv
>>>>>>>>>> delay
>>>>>>>>>> itself without sucess. I also tried streaming with pacat
>>>>>>>>>> directly as
>>>>>>>>>> described here:
>>>>>>>>>> https://thelinuxexperiment.com/fix-pulseaudio-loopback-delay/
>>>>>>>>>> I also tried to change different parameters of the loopback
>>>>>>>>>> module or
>>>>>>>>>> the sources/sinks, but that did not help. I never changed any
>>>>>>>>>> global
>>>>>>>>>> pulseaudio config to avoid larger configuration issues. The CPU
>>>>>>>>>> usage of
>>>>>>>>>> pulseaudio is at 3% with the loopback module
>>>>>>>>>> Can anyone help me to get rid of this lag?
>>>>>>>>> Hi Nico,
>>>>>>>>> which version of PA are you using? Can you provide logs?
>>>>>>>>> Regards
>>>>>>>>>                  Georg
>>>>>>>> Hi Georg,
>>>>>>>> oh sure I completely forgot:
>>>>>>>> pulseaudio 11.1-1 (Arch Linux)
>>>>>>>> uname -a: Linux zebes 4.14.15-1-ARCH #1 SMP PREEMPT Tue Jan 23
>>>>>>>> 21:49:25
>>>>>>>> UTC 2018 x86_64 GNU/Linux
>>>>>>>> Here is a logfile:
>>>>>>>> LANG=C pulseaudio -vvvv --log-time=1 > ~/pulseverbose.log 2>&1
>>>>>>>> https://gist.github.com/NicoHood/85976f426e1621e599253ee1a95230dd
>>>>>>>> Regards
>>>>>>>> Nico
>>>>>>> This is weird. It looks like the source sample rate is so much higher
>>>>>>> than the sink rate that module-loopback can't adapt. No idea why
>>>>>>> this happens. Does it work with another input?
>>>>>> I've tested it also with the builtin front microphone input (2nd
>>>>>> revision on gist) and with the PCIE Analog line in (3rd gist
>>>>>> revision).
>>>>>> You can view the changes here:
>>>>>> https://gist.github.com/NicoHood/85976f426e1621e599253ee1a95230dd/revisions
>>>>>> The problem only occurs with the digital, optical TOSLINK input
>>>>>> from my
>>>>>> Samsung TV. For some other reason the sound distortion for the analog
>>>>>> input is now (temporary) gone. However I still want to get that
>>>>>> TOSLINK
>>>>>> running :/
>>>>>> _______________________________________________
>>>>>> pulseaudio-discuss mailing list
>>>>>> pulseaudio-discuss at lists.freedesktop.org
>>>>>> https://lists.freedesktop.org/mailman/listinfo/pulseaudio-discuss
>>>>> As an additional test I send the audio to the TOSLINK output of the
>>>>> soundcard, back to its input and setup loopback on the input again (to
>>>>> the USB soundcard). With this method the sound has no lag. The
>>>>> difference is that the toslink signal comes from the soundcard itself
>>>>> rather than the TV. I have some smaller noises/distortion however
>>>>> sometimes. Here is the log:
>>>>> https://gist.github.com/NicoHood/6ef237649d97eaa69d9a78dd91eff34a
>>>> Somehow this still sounds like a sample rate mismatch. (A wild
>>>> guess, I do not know how the signal chain works for a TOS-link)
>>>> Have you tried setting your card to 48kHz? You can change
>>>> default-sample-rate and alternate-sample-rate in daemon.conf
>>>> both to 48000 and restart pulse to enforce this.
>>> With 48kHz The sound is working properly now. The problem I got ~~now~~
>>> is that there is sound distortion in the recording. -> A reboot fixed
>>> that.
>>> Is there any negative effect when using 48kHz as default sample rate? Is
>>> there a way to configure only the loopback module with this special
>>> sample rate? (Sorry, I have no idea how audio works internally). And if
>>> there is no other way than configuring the default sample rate, how can
>>> is set this as user (without root) if possible?
>>> Thanks a lot so far :)
>> If the sound card supports it, PA will always use either the default
>> or the alternative sample rate, whatever fits the current stream
>> better, unless there is already a stream running on the card.
>> So it should be enough to run module-loopback with rate=48000.
>> Don't forget to change the values in daemon.conf back to their
>> original values before you try it.
> Setting the rate for the loopback module does not give a positive
> result. Setting the sample rate with pacat for the SINK works fine
> though. This is the command I used:
> pacat -r --latency-msec=100 -d alsa_input.pci-0000_01_00.0.iec958-stereo
> | pacat -p --latency-msec=100 -d
> alsa_output.usb-M-AUDIO_M-Track_Hub-00.analog-stereo --rate=48000
> Is this a general bug? Is there a way to change the sample rate for the
> sink itself within the loopback module? I am still wondering why this
> happens, as I can capture any other input without changing the sink
> sample rate.
> If i set the source to 48000 and the sink to 44100 it does not work. I
> have no idea why. Any ideas?

Did you check what sample rates are really set for the sink/source
with "pactl list sinks" and "pactl list sources"? What you are setting
on the command line are in fact sample rates for the streams, not
for sink/source itself. There are several places where re-samplers
are used within PA, so that the rate of the stream need not match
the actual sample rate of the device.
Also, if the sink/source is busy (RUNNING or IDLE), PA will refuse to
change the sample rate. So ensure the source is SUSPENDED before
trying to set it to 48kHz.
I don't see a bug yet, apart from the fact that the TOS link apparently
passes on the sample rate of the connected device and ignores the
rate set for the source in PA. But because there is no easy way to
determine the rate of an incoming stream, I cannot see how this
could be fixed in PA.

In general (because of re-sampling) it should work if the source is
set to 48kHz and the sink is at 44.1kHz. In your pacat example
however you are connecting two independent streams, so if the
first stream is running on 48kHz and you tell the second stream
to interpret the data as being 44.1kHz, it cannot work.

Concerning module-loopback and the rate parameter - make sure
the source is SUSPENDED before loading the module. If you have
something like pavucontrol running, the source will never suspend
and will therefore not be able to change rate when a new stream
appears. Please also check with "pactl list sources" while it is
running that the source was really set to 48kHz.

More information about the pulseaudio-discuss mailing list