Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Using with module-combine-stream in pipewire and EasyEffects, no output #3675

Open
EasyNetDev opened this issue Feb 16, 2025 · 3 comments
Open

Comments

@EasyNetDev
Copy link

Hi,

I was playing around with module-combine-stream and when EasyEffects started suddenly there was not sound.
I've tried to exclude EasyEffects sink from combine module but without effect.

Here is my config for pipewire module-combine-stream:

context.modules = [
{   name = libpipewire-module-combine-stream
    args = {
        combine.mode = sink
        node.name = "combine_sink"
        node.description = "Combined Audio"
        combine.latency-compensate = false
        combine.props = {
            audio.position = [ FL FR ]
        }
        stream.props = {
        }
        stream.rules = [
            {
                matches = [
                    # any of the items in matches needs to match, if one does,
                    # actions are emitted.
                    {
                        # all keys must match the value. ! negates. ~ starts regex.
                        #node.name = "~alsa_input.*"
                        node.name = "!easyeffects_sink"
                        media.class = "Audio/Sink"
                    }
                ]
                actions = {
                    create-stream = {
                        #combine.audio.position = [ FL FR ]
                        #audio.position = [ FL FR ]
                    }
                }
            }
        ]
    }
}
]

All outs are working in the same time using this config.

I'm missing something from EasyEffects / pipewire?

@wwmm
Copy link
Owner

wwmm commented Feb 16, 2025

I'm missing something from EasyEffects / pipewire?

What PipeWire (and Pulseaudio) does for some virtual devices is implementing them through streams. The issue is that from EasyEffects point of view they are exactly like the streams audio players/recorders create. So EasyEffects tries to move them to its virtual device. What usually breaks the custom routing the user is trying to do.

In most cases adding the stream created by the module to EasyEffects blocklist is enough to fix the problem. It is just a matter of configuring the module in a way that the stream always has the same name. At least for loopback devices this is possible if I am not mistaken.

@EasyNetDev
Copy link
Author

EasyNetDev commented Feb 17, 2025

Hi @wwmm ,

Thanks for the explanation. First part I understand it. Second part is over my knowledge. I'm trying to understand what you wrote, but I have no clue where to start to look for.

I notice this behavior of EasyEffects that all streams are redirected to EasyEffects, so there is no need in Sound configuration to use EasyEffects sink.
But how EasyEffects is managing the output sinks, I'm out of clue. I'm not an expert in pipewire, just a simple user, so sorry for my lack of knowledge.

Where I can find this blocklist in EasyEffects? The output of EasyEffects is using the default output which is my "Combined Audio" sink. In "Output" in "Players" I can see the list of applications that are assigned a stream and also a list of devices sinks which all of them are starting with "output.combine_sink_ + device type (alsa/bluez) + device name".

@wwmm
Copy link
Owner

wwmm commented Feb 17, 2025

But how EasyEffects is managing the output sinks, I'm out of clue.

It doesn't manage the system sinks. By this I mean it does not try to mess with the default input/output device settings. What it does try to do in its default configuration is using whatever is set as the system default input and output.

The easy way to do what I suggested before is loading module-combine-stream and looking at what is makes available in EasyEffects Players/Recorders tab. If there is something related to it there just click on the Exclude checkbox at the side of the Enable checkbox. This should create an entry in EasyEffects Excluded Apps menu located at the right corner of our bottom panel.

Assuming that module-combine streams are always created with the same name this should be enough to make EasyEffects ignore them

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants