Microphone stops working when using Easy Effects Source as input device
EasyEffects Version
7,2,5
What package are you using?
Arch (easyeffects)
Distribution
CachyOS
Describe the bug
When I connect my TWS earbuds to my system, the built-in microphone works perfectly fine in all applications (Google Meet, Microsoft Teams, etc.). However, as soon as I set Easy Effects Source as the input device, the microphone stops working entirely, no sound is transmitted to the other side. This issue occurs even when no effects or processing chains are active. Simply selecting Easy Effects Source as the microphone input is enough to break audio input.
Please let me know if any info is required to help resolve this.
However, as soon as I set Easy Effects Source as the input device
By that do you mean you have set our virtual source as your system default input device? If yes do not do that https://github.com/wwmm/easyeffects/discussions/1836
By that do you mean you have set our virtual source as your system default input device? If yes do not do that #1836
My system’s default input device is always my TWS headset, and I never change that. I only manually select Easy Effects Source as the microphone input inside specific applications that require it such as Google Meet, Microsoft Teams, or other platforms.
To simplify testing, I also tried using https://mictests.com/, which lets you check microphone input activity. When I select my TWS microphone there, it works perfectly, the site shows input activity as I speak. However, when I select Easy Effects Source, there’s no input detected at all; it stays completely silent.
I’ve confirmed this behavior multiple times across Google Meet, Microsoft Teams, and the mic test site, the microphone works fine directly through my TWS but completely fails when routed through Easy Effects.
It is almost like there is no audio stream recording from our virtual source. EasyEffects will only build its effects pipeline if something is recording audio from its virtual source.
As you are using a distribution basedon Arch Linux my suggestion is that you install the AUR package. It will use our current master branch based on Qt instead o gtk. Debugging the gtk code now that we are about to release the next version based on Qt won't be productive as the gtk branch won't be developed anymore.
As you are using a distribution basedon Arch Linux my suggestion is that you install the AUR package. It will use our current master branch based on Qt instead o gtk. Debugging the gtk code now that we are about to release the next version based on Qt won't be productive as the gtk branch won't be developed anymore.
I’m on Arch Linux and have installed the easyeffects-git package from the AUR. I’m experiencing the exact same issue described in the referenced post.
To help with debugging, I’ve noticed something unusual: In addition to easyeffects source never working, now simply having Easy Effects running in the background causes the microphone input to stop working, even when I’ve selected my own microphone directly on https://mictests.com/. Unchecking the “Active” option from the system tray doesn’t fix it either. The microphone only starts working again once I completely exit Easy Effects.
Please check the attached video for a demonstration of the issue.
Edit: I just noticed that even my output stops working when this new easyeffects is running in background
https://github.com/user-attachments/assets/8d61e58b-94aa-4d97-bccd-1ebdf7db805f
I am doing some tests with https://mictests.com/ but so far everything is fine. Looking at your video I see one big difference compared to how things are on my side. I have one Firefox stream in the Players tab and another in the Recorders tab. At least in your players tab you do not have one. This is odd.
Run the command pw-dot. Its output file can be viewed wit the command xdot and will show how devices and filters are linked as well as each link state. On my side I have something like
All testing done via https://mictests.com/. Here are the scenarios i tested with
- Easyeffects closed + tws mic (working)
- Easyeffects running + tws mic (not working)
- Easyeffects running + easy effects source (not working)
The source of the problem is probably the loopback device your bluetooth microphone seems to need. As PipeWire implemented loopback devices through a combination of streams from EasyEffects point of view loopback devices are like any audio player. So it asks pipewire to move them to our virtual devices. But that is not what people usually want to happen when they are using a loopback device.
There is not much that we can automate on our side when it comes to loopback devices because each person usually does something different with them. The only reliable solution is based on the user manually adding the loopback device to EasyEffects blocklist in the cases where this is necessary.
One annoyance is that the number PipeWire attaches to loopback device node names changes. So you may have to edit the PipeWire configuration file that creates the loopback device and force a fixed name.
As PipeWire implemented loopback devices through a combination of streams from EasyEffects point of view loopback devices are like any audio player. So it asks pipewire to move them to our virtual devices.
But curiously pw-dot output does not show a loopback stream linked to our virtual devices. While at the same time it is quite clear that the loopback device only has half its links made. So at the end of the day EasyEffects broke it. It has to be added to the blocklist.
I wonder why a TWS bluetooth microphone needs a loopback device. This does not happen to my ordinary bluettoth headphone mic.
I wonder why a TWS bluetooth microphone needs a loopback device.
Maybe for the noise cancellation...
Thanks for the detailed explanation. I wish I could test my wired IEM right now, but my motherboard’s 3.5mm jack is broken. I’d need a dongle DAC to use it through a Type-A port instead. A few months ago, I did try my wired IEM mic with EasyEffects, and it worked perfectly fine, so this issue probably occurs only with Bluetooth microphones (just a guess).
From what I understand, to get my Bluetooth mic working correctly, I need to:
- Edit the PipeWire configuration to assign a fixed name to the loopback device.
- Add that loopback device to the EasyEffects blocklist.
I just have two questions:
- After doing this, will I still be able to use input effects in EasyEffects? My main goal is to use the Deep Noise Remover (from
libdeep_filter_ladspa-binon AUR) to reduce background noise from my mic. - If this setup works, could these steps be added to the documentation? It would make it much easier for non-technical users to follow. At the moment, i don't quite know how to proceed with this one
- After doing this, will I still be able to use input effects in EasyEffects?
Yes. As long as you only block the loopback device streams.
If this setup works, could these steps be added to the documentation? It would make it much easier for non-technical users to follow. At the moment, i don't quite know how to proceed with this one
It would be a good thing to do.
I am having the same problem since v8.0.0.
Both input and output from the app, the "Easy Effects Source" and the "Easy Effect Sink", don't work what so ever anymore. But it does detect the microphone and headset.
This is what i get when i run it with Flatpak:
easyeffects: stream_input_effects.cpp:243 Before: 78 -> alsa_input.usb-DCMT_Technology_USB_Condenser_Microphone_214b206000000178-00.pro-input-0
easyeffects: plugin_base.cpp:127 Processing: we received a null right_in pointer. Using the dummy array instead.
easyeffects: plugin_base.cpp:139 Processing: we received a null left_out pointer. Using the dummy array instead.
easyeffects: plugin_base.cpp:151 Processing: we received a null right_out pointer. Using the dummy array instead.
easyeffects: plugin_base.cpp:139 Processing: we received a null left_out pointer. Using the dummy array instead.
easyeffects: plugin_base.cpp:151 Processing: we received a null right_out pointer. Using the dummy array instead.
easyeffects: plugin_base.cpp:127 Processing: we received a null right_in pointer. Using the dummy array instead.
easyeffects: plugin_base.cpp:139 Processing: we received a null left_out pointer. Using the dummy array instead.
easyeffects: plugin_base.cpp:151 Processing: we received a null right_out pointer. Using the dummy array instead.
easyeffects: stream_input_effects.cpp:243 Before: 78 -> alsa_input.usb-DCMT_Technology_USB_Condenser_Microphone_214b206000000178-00.pro-input-0
easyeffects: main.cpp:139 Disabling global bypass
easyeffects: plugin_base.cpp:139 Processing: we received a null left_out pointer. Using the dummy array instead.
easyeffects: plugin_base.cpp:151 Processing: we received a null right_out pointer. Using the dummy array instead.
QWebEngineDesktopMediaRequest is neither a default constructible QObject, nor a default- and copy-constructible Q_GADGET, nor a QObject marked as uncreatable.
You should not use it as a QML type.
qrc:/ui/PageStreamsEffects.qml:12:1: QML PageStreamsEffects: Created graphical object was not placed in the graphics scene.
qt.graphs2d.series: points list size is 0, can't calculate spline points.```
Processing: we received a null right_in pointer. Using the dummy array instead.
@Azarilh show your full log. I think you have way too much of these error messages. Which pipewire version do you have installed? Your problem seems to be something completely different from the one discussed at this thread. It does not feel like an issue related to loopback devices.
@Azarilh show your full log. I think you have way too much of these error messages. Which pipewire version do you have installed? Your problem seems to be something completely different from the one discussed at this thread. It does not feel like an issue related to loopback devices.
I am running Pipewire v1.5.81 on OpenSUSE TW and kernel 6.17.7-1-default.
Here is the app ran with the debug option ( i assume that's what you mean by log, cos i can't find a file for it ): https://pastebin.com/EB3LD9SP
I tried to also delete the "com.github.wwmm.easyeffects/" folder that contains cache and settings.
I am running Pipewire v1.5.81 on OpenSUSE TW and kernel 6.17.7-1-default.
OpenSUSE made the mistake of putting a pipewire release candidate in their stable repository. I do not know yet what it is this pipewire version is doing that breaks EE 8.0. But the current recommendation for OpenSUSE users is to downgrade pipewire to an actually stable release like 1.4.8 or 1.4.9.
I am running Pipewire v1.5.81 on OpenSUSE TW and kernel 6.17.7-1-default.
OpenSUSE made the mistake of putting a pipewire release candidate in their stable repository. I do not know yet what it is this pipewire version is doing that breaks EE 8.0. But the current recommendation for OpenSUSE users is to downgrade pipewire to an actually stable release like 14.8 or 1.4.9.
Seems like you were right. I downgraded to 1.4.8 and now Easy Effects works. Just a quick question, is it possible to automatically apply the output effects on my custom sinks? If not, i guess i'll try to loop the sinks from EasyEffects' sink if possible. Either way, thanks for your quick reply.
. Just a quick question, is it possible to automatically apply the output effects on my custom sinks?
If you set your custom sink as your system default output device EasyEffects will use it. But if you want your custom sink output to get to EasyEffects sink input you will need to do some manual work.