mumble-voip / mumble

Mumble is an open-source, low-latency, high quality voice chat software.
https://www.mumble.info
Other
6.41k stars 1.12k forks source link

Mumble creates loud cracking sounds out of nowhere #5541

Closed bergfried closed 2 months ago

bergfried commented 2 years ago

Description

According to "Audio Statistics", there sometimes occur short, loud pops, apparently approximating white noise with maximum power (according to the displayed spectrum). These pops also appear on mumble:output_1 in JACK while in Local loopback mode in Mumble, and other users in Mumble can also hear them.

Steps to reproduce

I use Mumble with JACK for both audio input and output, and transmission mode is set to "Continuous". No amplification, noise suppression, echo cancellation etc. is done by Mumble (all turned off). Instead, I use Carla to send the signal from system:capture_1 through two effects, first noise-repellent with a fixed, pre-learned noise profile, and then compress_rms. The result is then fed into Mumble. (According to the "Audio Statistics" in Mumble, this gives me a "Signal-To-Noise ratio" of 00.000 while silent and something easily above 240000000.000 when I start speaking, which is good.)

This setup used to work flawlessly in Mumble 1.3.4.

Mumble version

1.4.0

Mumble component

Client

OS

Linux

Reproducible?

Yes

Additional information

I tried to identify the source of these cracks by feeding the same signal that I feed into Mumble into other applications. As it turns out, all other JACK applications fail to detect these cracks. Thus, apparently, Mumble creates them all by itself! Then, I tried to capture both the input and the output side of Mumble in a file, using jack_capture. (This is surprisingly difficult because as soon as I switch "Loopback Test" mode from None to Local and apply these changes, the mumble JACK client disappears and then reappears, losing all its previous connections in the process.)

Using Audacity to inspect the resulting file, I could confirm my hypothesis so far: The output appears to be white noise, extremely loud for quite exactly either 512 or 1024 samples, each time surrounded by much softer "tails" (which might be artefacts of some signal processing, or compression artefacts introduced by Mumble), but without any apparent input signal that might have caused it, or any reason why the output should be that loud.

Then, I bypassed Carla and fed the pre-recorded signal that came out of Carla earlier (and might have triggered this issue) directly into Mumble instead, but then, there were no pops or any indication of them happening in the "Audio Statistics" even though Mumble did produce pops during the recording earlier.

Then, I captured the original signal coming from system:capture_1 while I also fed it into Carla simultaneously, which then fed the processed signal into Mumble. Afterwards, I fed that same signal I just recorded into Carla, effectively replacing system:capture_1 as input. Again, there was no indication of pops occuring, despite Mumble being presented the exact same input signal (if Audacity does not introduce changes by itself, that is, but attempts with mpv where also unsuccessful).

If I connect system:capture_1 with mumble:input directly, bypassing all of Carla, everything seems to work fine so far in both 1.3.4 and 1.4.0, but then everything is noisy and the SNR is around 01.000 while silent, and I need to shout to get it somewhere near 500.000.

Note that there were no xruns occuring in JACK during experimentation.

(Just a hunch, but I suspect some numerical issues whenever SNR or the noise spectrum as measured by Mumble is close to zero.)

Relevant log output

No response

Screenshots

Note: All screenshots are independent of each other, not necessarily displaying the same signal.

When it happens in Mumble: mumble-audio-statistics

Audacity displaying pre-processed input at the top and the corresponding (and also slightly but insignificantly post-processed) output at the bottom. Genuine input is visible at the left, two spurious pops are visible at the output on the right without any apparent corresponding input: audacity-normal-input-output-two-pops

Detail of a spurious output signal. Note that the highlighted part encompasses exactly 1024 samples and also matches the loudest part of it: audacity-pop-input-output

Krzmbrzl commented 2 years ago

Hm... we had reports of RNNoise causing some crackling but you said you are not using noise suppression inside of Mumble...

Did you check whether the issue persist without using Carla at all?

bergfried commented 2 years ago

Yes, I did. Just search for "bypassing all of Carla" in the original post. EDIT: While we are at it: I also noticed the RNNoise-related posts earlier, so I triple-checked my Mumble settings. Keeping Mumble's noise suppression turned off is necessary for me because Mumble constantly relearns the noise profile, which does not work well with singing and the like.

Krzmbrzl commented 2 years ago

Ah yes indeed, my bad.

Could you try whether you can reproduce the issue when using push to talk or continous mode?

bergfried commented 2 years ago

As I wrote in my original post, the issue is present in "Continuous" mode. However, after a lot more testing, it looks like transmission mode does not seem to matter at all. You can even be on "Push to talk", do not press the PTT button and be muted and deafened all at the same time, and the issue can still be triggered. More things I noticed:

noise-floor-during-pops

Or maybe it is somehow related to JACK.

I kept experimenting until I managed to create a demo file that I could plug into mumble:input and the issue would become apparent. Not perfectly predictable, but at around the same parts in the demo file, you would get significantly more cracking sounds than at other parts. Nice! However, I tried to reduce dependencies, so I unplugged the mumble:output_* ports from Carla (I normally process those signals as well before it goes to hardware ports) and connected them with system:playback_* directly. As soon as I did that, the issue disappeared! And the more I tried to recreate the same setup with Mumble, Carla and JACK, the less pronunced it became each time I unplugged mumble:output_* from Carla. At the end, I could not reproduce the issue with the demo file anymore, even with mumble:output_* connected to Carla. (Or maybe it was just a coincidence, as it appears to me now.) Restarting Mumble, as I did several times throughout experimentation, did not help either.

So, I restarted JACK. And then, I could reproduce the issue again with said demo file.

Maybe it has something to do with Carla? But how should Carla have an influence here, even if the Mumble process in question never connected to it? Also, there are no issues with 1.3.4, so it is probably specific to 1.4.0. Or 1.4.230, as it reads now in my setup.

I use a buffer size of 512 in JACK, that's why I am not surprised to see this issue involving cracking sounds for that long (or non-trivial multiples of it). Or maybe it's just because some Mumble-related signal processing involves these numbers, think FFT, who knows. So, maybe it has something to do with DSP load? Nope, I also tried this by adding rubberband-pitchshifter-stereo to Carla and shift pitch up by several octaves, along with more stuff, connections and whatnot. DSP load at 67 % but still no readily observable effect. Trying to put stress on CPU, load goes up like crazy, every other application becomes visibly less responsive, but DSP in JACK runs smoothly as always, not a single xrun either. And no effect on the cracking issue, of course. Turning off realtime capabilities in JACK had no significant effect either.

After several more hours of experimenting now, the closest-to-minimum way of reproducing this issue I could find so far is this (with possible some more unknown assumptions, so it's a bit sketchy):

I wonder whether it is somehow related to #3826, maybe something involving synchronization (memory corruption) issues or floating-point conversion (numerical) issues or something. Is there an easy way to build a 1.4.230 but with #3826 reverted on Arch Linux? Like a PKGBUILD including necessary patches?

Any (other) ideas?

bergfried commented 2 years ago

I just closed the "Audio Statistics" window, and the entire graphical environment crashed immediately. This is now the second time that something like this happened during experimenting with 1.4.230, and it only happend during this time.

Krzmbrzl commented 2 years ago

Uff - what a strange issue.

You can of course always clone the repo and then just use git to revert the commit(s) in question before building Mumble :thinking:

bergfried commented 2 months ago

For the record, I did not experience this behavior for years now, which might be also due to a hardware upgrade in the meantime which turns the whole thing irreproducible. Closing.

Krzmbrzl commented 2 months ago

Thanks for the update :+1: