[pulseaudio-discuss] RTP makes high tone pitch
Lars Stollenwerk
LSto at gmx.de
Sun Mar 26 17:43:25 UTC 2023
Hi Georg,
thank you for your detailed answer! Especially the hint regarding the number
of samples in the latency buffer was very enlightening.
Now at the weekend I had time to test your suggestions. I'm using
pulseaudio version 14.2 as part of the current raspberry pi os. The parameter
log_interval to the module-loopback seems not to be supported; the
corresponding call of 'pactl load-module ...' returns with non-zero return
code. Setting log-level to 4 did not produce any relevant log lines.
Nevertheless, I increased the latency step by step to 70 ms for the
module-loopback with max_latency_msec of 100. For module-rtp-recv I set the
latency to 100 ms. Now we are testing the intercom with these parameters.
Right now, it works since several hours without helium-voice. I am
optimistic...
By the way, the documentation of the modules at [1] seems not to contain all
module parameters (e. g. log_interval is not mentioned). Furthermore, it is
not clear to me which version the documentation belongs to. Is there another
resource with the full documentation of a given version?
Many thanks and best regards
Lars
[1] https://www.freedesktop.org/wiki/Software/PulseAudio/Documentation/User/Modules/
> Hi,
>
> you say below, that a few hundred milliseconds would be an acceptable
> latency.
> Why then do you set the values so low? Setting the loopback latency to
> 1ms and
> max_latency to 10ms is not a good idea and will probably not work as
> expected.
> The latency you specify for the loopback includes source and sink latency
> (= source latency + sink latency + loopback buffer latency), so a
> reasonable value
> for you would be around 50 ms or larger when you are using an USB device.
> The max_latency parameter is only intended to be used when the latency grows
> too much and should not be specified unless the latency increases
> significantly
> over time.
>
> Something similar applies to module-rtp-recv. Specifying a latency of 1ms at
> 8000 Hz means that you have just 8 audio frames of latency. So here I would
> go for something like 100ms.
>
> Both, module-loopback and module-rtp-recv try to adjust to the requested
> latency by changing the sample rate. This is probably what you hear. In
> particular, while module-loopback stops when the sample rate is more than
> 1% away from the base rate, there is no such limit for module-rtp-recv.
>
> To debug the situation I would run PA with debug logging and also add
> the log-interval=1 parameter to module-loopback. This produces quite a
> lot of output, but then you should be able to see what happens and can
> adjust your parameters for optimum performance. To enable debug logging
> and to send the output to a file you can use
>
> pacmd set-log-level 4
> pacmd set-log-target file://tmp/pulse.log
>
> The log settings will revert to the default values when PA is restarted.
> Hope this helps.
>
> Regards
> Georg
>
> On 19.03.23 16:14, Lars Stollenwerk wrote:
> > Hi all,
> >
> > I am using PulseAudio to implement a kind of intercom: In our ham radio club
> > house we want to install in every room a raspberry pi with PulseAudio running;
> > this is what I call a 'client'. Each client is connecet to a microphone and a
> > speaker using a USB sound card. To send and receive the audio signal over
> > network, on each client a set of PulseAudio modules is started using 'pactl
> > load-module ...'. The follwing modules are started:
> >
> > Sending path
> > ------------
> > Signal path: mic-source -> loopback -> null-sink -> rtp-send
> >
> > module-null-sink
> > sink_name=rtp-tx-sink
> > rate=8000
> > channels=1
> > module-loopback
> > source=<mic-source>
> > sink=rtp-tx-sink
> > latency_msec=1
> > max_latency_msec=10
> > fast_adjust_threshold_msec=100
> > adjust_time=1
> > rate=8000
> > channels=1
> > module-rtp-send
> > rate=8000
> > channels=1
> > loop=false
> > source=rtp-tx-sink.monitor
> > destination=224.0.0.47
> >
> > Receiving path
> > --------------
> > Signal path: rtp-recv -> null-sink -> loopback -> speaker-sink
> >
> > module-null-sink
> > sink_name=rtp-rx-sink
> > rate=8000
> > channels=1
> > module-loopback
> > source=rtp-rx-sink.monitor
> > sink=<speaker-sink>
> > latency_msec=1
> > max_latency_msec=10
> > fast_adjust_threshold_msec=100
> > adjust_time=1
> > rate=8000
> > channels=1
> > module-rtp-recv
> > latency_msec=1
> > sink=rtp-rx-sink
> > sap_address=224.0.0.47
> >
> > The null-sinks are used to mute the stream when necessary.
> >
> > Generally, the set-up works. However, often the pitch of the voice is much too
> > high. I. e., the voice can be well understood but sounds more or less like a
> > Helium voice.
> >
> > The values for latency are all chosen to be very small. The reason is that we
> > can accept short drop-outs, but not a big latency (few 100 ms is the maxium
> > acceptable). I have tryed to increase max_latency_msec of the loopback
> > devices to 60 ms - without success.
> >
> > My question to the community is: Does anyone know where the high pitch voice
> > comes from? And how to avoid this?
> >
> > I am thankful for any help!
> >
> > Best ragards
> > Lars
> > --
> > / ePistulae: formica at Opppf.de
> > O-O-@
> > / | \ PGP Key : 0x6E5651C4
> > FORMICA Homepage : http://www.Opppf.de/
>
--
/ ePistulae: formica at Opppf.de
O-O-@
/ | \ PGP Key : 0x6E5651C4
FORMICA Homepage : http://www.Opppf.de/
More information about the pulseaudio-discuss
mailing list