-
-
Notifications
You must be signed in to change notification settings - Fork 283
-
Hello, I configured a filter chain to enable Virtual Surround Sound using Pipewire Filter Chain using various guides online. It works, but I feel like I miss something, the sound still seemed a bit "flat" while playing games, a lack of bass, etc. So I wanted to apply EasyEffects on top of it to add some bass. Basically trying to get the same audio quality as I get with Logitech G Hub on Windows (and maybe better if I can). And I find it considerably hard on Linux. However, from what I understood, it is not possible to do that with Easy Effects? Or have I misunderstood something? Can't I just take the output from EasyEffects and gives it to the Filter Chain? If so, how? (Or, is there any other Linux software that I can use with Virtual Surround Filter Chain?) I am a bit lost with all the stuff around Linux audio, I am not really sure where to ask stuff or how to find proper information for my needs, so sorry for my lack of knowledge ^^ Thanks! (I'm using Nobara Linux) |
Beta Was this translation helpful? Give feedback.
All reactions
Replies: 1 comment · 15 replies
-
As EasyEffects effects pipeline supports only 2 channels (input and output) doing virtual surround on our side is not possible. At least not the way I understand virtual surround. Usually you take a multichannel signal and cleverly downmix it to 2 channels so that the "surround feeling" remains. I've never used virtual surround on PipeWire but I imagine this is what it is doing. Is it possible to redirect PipeWire's virtual surround output to a loopback device (essentially a virtual node with 2 inputs and 2 outpus) instead of the soundcard? If yes something you could try is forcing the sorround output to a loopback device and make the loopback output somehow behave like an ordinary player stream and passthrough EasyEffects. Definitely an annoying setup to do but it should be possible. It would be something like this #1126 (comment) but instead of making EasyEffects output go through the loopback the loopback receiving the virtual surround would be the one sending its output to EasyEffects sink. |
Beta Was this translation helpful? Give feedback.
All reactions
-
I am not sure if it is necessarily a placebo. Maybe PipeWire's virtual surround hrtf prcessing does something even if receiving ordinary stereo signals as input. What I can say is that if you send the game's multichannel signal to EasyEffects virtual sink PipeWire will have to downmix it to an ordinary stereo because EasyEffects pipeline and sink are stereo. That is why I thought about making EasyEffects processing the stereo signal coming after the virtual surround node. The next time you have the setup running execute in a terminal the command |
Beta Was this translation helpful? Give feedback.
All reactions
-
Oh, I understand. I was guessing that the multichannel signal was "kept", but just not used in Easy Effects, until it reaches the filter. I may have misunderstood the thing. The screenshot below show the setup (here using Firefox, but it is the same with a game): Maybe the game already has some kind of surround stuff. Also, I am using this config file for the surround : https://gitlab.freedesktop.org/pipewire/pipewire/-/blob/master/src/daemon/filter-chain/sink-virtual-surround-7.1-hesuvi.conf
dot file
|
Beta Was this translation helpful? Give feedback.
All reactions
-
pw-dot with the game running
|
Beta Was this translation helpful? Give feedback.
All reactions
-
Now that I have a better picture of the whole situation I thin that you do not need to create an additional loopback device. It should be possible to do something like this:
As far as EasyEffects is concerned it does not need to know it is getting a sink's output. We just have to figure out how to change this virtual sink configuration file in a way that you can specify where its output ports should be linked to. Maybe Pipewire's wiki has an example about this. If not it won't harm to ask PipeWire's developers about it. |
Beta Was this translation helpful? Give feedback.
All reactions
-
PipeWire's examples in their wiki use a |
Beta Was this translation helpful? Give feedback.
All reactions
-
It kinda works. But it is even more annoying to setup, with Pipewire constantly switching its output node to something I don't want. It's hard to explain. I basically created two filter-chain, one that output directly to my headset, the other to EasyEffects (so I have one way of directly going to my headset instead of going through EasyEffects), but it does not work well when EE is closed. Now, when EasyEffects is running, I need to manually select in Pavucontrol what output devices should my playback node be sent (so, I need to tell Firefox to output in the virtual chain). Other than that, I can tell the filter to output in EasyEffects Sink, which is great. So, yeah, it works, but I just can't find a way to simply switch output device easily, and also change the output device of specific app without them constantly being reverted back to weird default (like I would like Discord to NOT output in the Virtual Surround chain or even EasyEffects, but everytime I restart the computer, it does it again). What I did in EasyEffects, is that I excluded all devices, and only enable the filter-chain. So Firefox (or games) are being forced to go first to the capture node of the filter chain first. Sorry for my bad explanation, I am quite lost myself with all of this... I need to investigate more to get out from this rabbit hole lol. Btw, I do not know if this is a bug with EasyEffects, but when I exclude something from the app, when I load a new configuration, the excluded app/sink is being enabled again. I think this is because I need to save the change in the setting file, but is there a way to do it globally for every EE presets? |
Beta Was this translation helpful? Give feedback.
All reactions
-
You can avoid it outputting to EasyEffects by putting it in EasyEffects blocklist. Each stream in EasyEffects has a checkbox that will allow you to easily do this. As WirePlumber is the one managing where each stream goes to I would try to see if it offers some way to avoid a stream using a particular device. |
Beta Was this translation helpful? Give feedback.
All reactions
-
WirePlumber remembers the last device used by a stream and tries to restore it. That is probably why they are coming back even after blocklisting it in EasyEffects. The blocklist forbids EasyEffects from moving the stream. But other audio managers can still move them to our devices or any other. Usually after manually set them somewhere else wireplumber remembers the new device and forgets easyeffects. A last resort may be to delete |
Beta Was this translation helpful? Give feedback.
Now that I have a better picture of the whole situation I thin that you do not need to create an additional loopback device. It should be possible to do something like this:
As far as EasyEffects is concerned it does not need to know it is getting a sink's output. We just have to figure out how to change this virtual sink configuration file in a way that you can specify where its output ports should be linked to.…