wwmm / easyeffects

Limiter, compressor, convolver, equalizer and auto volume and many other plugins for PipeWire applications
GNU General Public License v3.0
6.23k stars 265 forks source link

EasyEffects crashes when microphone is muted #2828

Open zastrixarundell opened 7 months ago

zastrixarundell commented 7 months ago

EasyEffects Version

7.1.3

What package are you using?

Flatpak (Flathub)

Distribution

Fedora Kinoite 39, uBlue

Describe the bug

When the microphone is muted via the mute button on KDE (I have not tried on Gnome) EasyEffects would crash. This started happening fairly recently, maybe 2 weeks ago.

https://github.com/wwmm/easyeffects/assets/30195425/7d013022-3792-4fa5-baa8-68057c7442fb

Expected Behavior

It won't crash.

Debug Log

Debug Log (the file is too large to just paste).

Additional Information

No response

zastrixarundell commented 7 months ago

So the minimum setup to crash when muting the microphone at least in my experiments are (all default configs):

image

Of course, the microphone needs to be processed by EE to crash.

zastrixarundell commented 7 months ago

This might be #2752 potentially? The errors aren't really saying it though:

$ flatpak-coredumpctl com.github.wwmm.easyeffects -m easyeffects
Executable /app/bin/easyeffects doesn't seem to be a flatpaked application.
Running: `"flatpak" "run" "--filesystem=home" "--filesystem=/tmp" "--command=gdb" "--devel" "com.github.wwmm.easyeffects" "/app/bin/easyeffects" "/tmp/tmpv092129g"`
GNU gdb (GDB) 13.2
Copyright (C) 2023 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Type "show copying" and "show warranty" for details.
This GDB was configured as "x86_64-unknown-linux-gnu".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<https://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
    <http://www.gnu.org/software/gdb/documentation/>.

For help, type "help".
Type "apropos word" to search for commands related to "word"...
Reading symbols from /app/bin/easyeffects...

This GDB supports auto-downloading debuginfo from the following URLs:
  <https://debuginfod.fedoraproject.org/>
Enable debuginfod for this session? (y or [n]) n
Debuginfod has been disabled.
To make this setting permanent, add 'set debuginfod enabled off' to .gdbinit.
(No debugging symbols found in /app/bin/easyeffects)

warning: Can't open file /memfd:kwin-dmabuf-feedback-table (deleted) during file-backed mapping note processing

warning: Can't open file /memfd:wayland-cursor (deleted) during file-backed mapping note processing
[New LWP 2]
[New LWP 19]
[New LWP 30]
[New LWP 20]
[New LWP 31]
[New LWP 22]
[New LWP 23]
[New LWP 27]
[New LWP 35]
[New LWP 3]
[New LWP 4]
[New LWP 5]
[New LWP 13]
[New LWP 32]
[New LWP 25]
[New LWP 34]
[New LWP 21]
[New LWP 29]
[New LWP 26]
[New LWP 28]
[New LWP 24]
[New LWP 33]
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/usr/lib/x86_64-linux-gnu/libthread_db.so.1".
Core was generated by `easyeffects'.
Program terminated with signal SIGSEGV, Segmentation fault.
#0  0x00007f665d177795 in __memmove_avx_unaligned_erms () from /usr/lib/x86_64-linux-gnu/libc.so.6
[Current thread is 1 (Thread 0x7f665bd6b9c0 (LWP 2))]
(gdb) bt
#0  0x00007f665d177795 in __memmove_avx_unaligned_erms () at /usr/lib/x86_64-linux-gnu/libc.so.6
#1  0x000055efdea9fb2b in  ()
#2  0x000055efdeaa04f3 in  ()
#3  0x000055efded868af in  ()
#4  0x00007f665f0a4d47 in g_main_dispatch () at /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0
#5  0x00007f665f0a6e57 in g_main_context_iterate_unlocked.isra () at /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0
#6  0x00007f665f0a7513 in g_main_context_iteration () at /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0
#7  0x00007f665e500c00 in g_application_run () at /usr/lib/x86_64-linux-gnu/libgio-2.0.so.0
#8  0x000055efdea0ebe0 in  ()
#9  0x00007f665d03b08a in __libc_start_call_main () at /usr/lib/x86_64-linux-gnu/libc.so.6
#10 0x00007f665d03b14b in __libc_start_main () at /usr/lib/x86_64-linux-gnu/libc.so.6
#11 0x000055efdea10385 in  ()
(gdb) 
wwmm commented 7 months ago

This might be https://github.com/wwmm/easyeffects/issues/2752 potentially?

Maybe. But as you've noticed the error messages are not exactly the same. But it is worth to install the development package available at the bottom of the following page https://github.com/wwmm/easyeffects/actions/runs/7322809280. I have already updated the crystalizer and the bass enhancer plugins with some changes that should fix #2752. So if your problem is the same it may help.

wwmm commented 7 months ago

But it is really strange that a mute mic causes this. Usually the result of this action is the processing of silence. So considering the crash is related to an avx call like __memmove_avx_unaligned_erms maybe one of the libraries EasyEffects is using did not like the values that came as a result of silence. Is there any change if you remove the crystalizer plugin from the pipeline? Or maybe the noise reduction plugin.

zastrixarundell commented 7 months ago

I just installed that version of EE and it isn't working, it's not processing my input audio at all. I get a blink of connected nodes on qpwgraph for maybe a second (no audio) and then everything disconnects. One time I did get some some audio but it was just a robotic sound on repeat, like a high voltage transforming station which is under HEAVY noise-altering plugins.

I did mess around with configuring EE and it seems that it crashes if the number of plugins overall is >= 4 and both Noise Reduction and Crystalizer are present.

So this would crash: image

I don't even know what LM does and I've never used it.

This and the following won't crash despite having multiple plugins: +crys-noise -crys+noise

wwmm commented 7 months ago

I don't even know what LM does and I've never used it.

It is not a plugin intended to be always in the pipeline. It is useful for people that are tuning the volume levels in some situations. Bu once it is in the desired point the plugin is removed. It does not change the audio data. It just estimate loudness levels.

wwmm commented 7 months ago

This and the following won't crash despite having multiple plugins

Strange. Did you notice if the crash only happens when high sampling rates like the 96 kHz in the image are used?

zastrixarundell commented 7 months ago

Okay seems that lowering it down to 48KHz did fix the crash although the tone of my voice when recording is changed with the same plugins, just by lowering it down to 48KHz.

I did have my system run @ 96KHz before this started crashing though so it's not the direct cause probably.

wwmm commented 7 months ago

I did have my system run @ 96KHz before this started crashing though so it's not the direct cause probably

Strange indeed. And I do not remember a reason for 96 kHz to be a problem. The noise reduction plugin library only works with 48 kHz. So it will have to do resampling when the pipeline is working with a different rate. I wonder if the resampling process is somehow introducing bad data in the audio buffers that could make __memmove_avx_unaligned_erms crash. But as it isn't a function directly called by EasyEffects code I am not even sure about what is calling it exactly...

zastrixarundell commented 7 months ago

Probably better to link this issue to upstream at the noise library. But weird that it crashes where there isn't any audio source present as opposed for when there is.

wwmm commented 7 months ago

But weird that it crashes where there isn't any audio source present as opposed for when there is.

I agree. It is not making any sense to me. Specially because I use the same plugins daily on my computer without crashes. At this moment I am at a videconference on MS Teams using both the speakers and the mic pipeline without problems. And with plenty of silent minutes. So the silence alone is not the problem. Something else is going on together with it.