Will not allow applications to be switched to a particular output
EasyEffects Version
8.0.3
What package are you using?
Flatpak (Flathub)
Distribution
CachyOS/Arch
Describe the bug
Before EasyEffects 8, I was able to switch a running audio stream to a different output. After the new major upgrade, whenever I attempt to do so, the stream is immediately switched back to the default output.
I have a virtual sink and source set up like so:
context.modules = [
{
name = libpipewire-module-loopback
args = {
audio.position = [ FL FR ]
capture.props = {
media.class = Audio/Sink
node.name = my_sink
node.description = "Micspam In"
}
playback.props = {
media.class = Audio/Source
node.name = "my_sink.output"
node.passive = true
node.description = "Micspam Out"
}
}
}
]
When I attempt to switch, for example, a Firefox tab's stream to Micspam In, it is immediately switched back to the default output device. This does not happen when I quit EasyEffects.
Expected Behavior
EasyEffects should leave my preference for a particular stream's output alone.
Debug Log
Debug logs when replicating:
~ % flatpak kill com.github.wwmm.easyeffects
error: com.github.wwmm.easyeffects is not running
~ % flatpak run com.github.wwmm.easyeffects --debug 1
easyeffects: main.cpp:138 LV2 search paths: /app/extensions/Plugins/lv2:/app/lib/lv2
easyeffects: pw_manager.cpp:283 Compiled with PipeWire: 1.4.8
easyeffects: pw_manager.cpp:284 Linked to PipeWire: 1.4.8
easyeffects: pw_manager.cpp:172 Core version: 1.4.9
easyeffects: pw_manager.cpp:173 Core name: pipewire-0
easyeffects: pw_metadata_manager.cpp:48 Found metadata: settings
easyeffects: pw_node_manager.cpp:236 Audio/Source 36 my_sink.output with serial 36 has been added
easyeffects: pw_node_manager.cpp:236 Audio/Sink 37 my_sink with serial 37 has been added
easyeffects: pw_metadata_manager.cpp:48 Found metadata: schema-sm-settings
easyeffects: pw_metadata_manager.cpp:48 Found metadata: persistent-sm-settings
easyeffects: pw_metadata_manager.cpp:48 Found metadata: sm-settings
easyeffects: pw_metadata_manager.cpp:48 Found metadata: sm-objects
easyeffects: pw_metadata_manager.cpp:48 Found metadata: default
easyeffects: pw_metadata_manager.cpp:62 Successfully registered default metadata
easyeffects: pw_metadata_manager.cpp:48 Found metadata: filters
easyeffects: pw_metadata_manager.cpp:48 Found metadata: route-settings
easyeffects: pw_node_manager.cpp:236 Audio/Sink 62 alsa_output.pci-0000_c1_00.6.analog-stereo with serial 62 has been added
easyeffects: pw_node_manager.cpp:236 Audio/Source 63 alsa_input.pci-0000_c1_00.6.analog-stereo with serial 63 has been added
easyeffects: pw_node_manager.cpp:236 Stream/Output/Audio 121 Firefox with serial 305 has been added
easyeffects: pw_node_manager.cpp:236 Stream/Output/Audio 144 Firefox with serial 942 has been added
easyeffects: pw_node_manager.cpp:236 Stream/Output/Audio 140 Firefox with serial 2170 has been added
easyeffects: pw_link_manager.cpp:135 port 124 is connected to port 64
easyeffects: pw_link_manager.cpp:135 port 136 is connected to port 66
easyeffects: pw_link_manager.cpp:135 port 154 is connected to port 64
easyeffects: pw_link_manager.cpp:135 port 137 is connected to port 66
easyeffects: pw_link_manager.cpp:135 port 103 is connected to port 64
easyeffects: pw_link_manager.cpp:135 port 100 is connected to port 66
easyeffects: pw_node_manager.cpp:236 EE/Audio/Sink 89 easyeffects_sink with serial 2503 has been added
easyeffects: pw_node_manager.cpp:236 EE/Audio/Source 87 easyeffects_source with serial 2504 has been added
easyeffects: pw_metadata_manager.cpp:87 New metadata property: 0, default.configured.audio.sink, Spa:String:JSON, {"name":"alsa_output.pci-0000_c1_00.6.analog-stereo"}
easyeffects: pw_metadata_manager.cpp:87 New metadata property: 0, default.configured.audio.source, Spa:String:JSON, {"name":"alsa_input.pci-0000_c1_00.6.analog-stereo"}
easyeffects: pw_metadata_manager.cpp:87 New metadata property: 0, default.audio.sink, Spa:String:JSON, {"name":"alsa_output.pci-0000_c1_00.6.analog-stereo"}
easyeffects: pw_metadata_manager.cpp:101 New default output device: alsa_output.pci-0000_c1_00.6.analog-stereo
easyeffects: pw_metadata_manager.cpp:87 New metadata property: 0, default.audio.source, Spa:String:JSON, {"name":"alsa_input.pci-0000_c1_00.6.analog-stereo"}
easyeffects: pw_metadata_manager.cpp:113 New default input device: alsa_input.pci-0000_c1_00.6.analog-stereo
easyeffects: pw_metadata_manager.cpp:87 New metadata property: 0, default.video.source, Spa:String:JSON, {"name":"v4l2_input.pci-0000_c1_00.4-usb-0_1_1.0"}
easyeffects: pw_metadata_manager.cpp:87 New metadata property: 121, target.node, Spa:Id, 80
easyeffects: pw_metadata_manager.cpp:87 New metadata property: 121, target.object, Spa:Id, 80
easyeffects: pw_metadata_manager.cpp:87 New metadata property: 144, target.node, Spa:Id, 80
easyeffects: pw_metadata_manager.cpp:87 New metadata property: 144, target.object, Spa:Id, 80
easyeffects: pw_metadata_manager.cpp:87 New metadata property: 140, target.node, Spa:Id, 80
easyeffects: pw_metadata_manager.cpp:87 New metadata property: 140, target.object, Spa:Id, 80
easyeffects: pw_manager.cpp:352 easyeffects_sink node successfully retrieved with id 89 and serial 2503
easyeffects: pw_manager.cpp:357 easyeffects_source node successfully retrieved with id 87 and serial 2504
easyeffects: pw_device_manager.cpp:199 new Family 17h/19h/1ah HD Audio Controller input route: Internal Microphone
easyeffects: pw_device_manager.cpp:210 new Family 17h/19h/1ah HD Audio Controller output route: Speakers
easyeffects: pw_metadata_manager.cpp:87 New metadata property: 121, target.node, Spa:Id, 4294967295
easyeffects: pw_metadata_manager.cpp:87 New metadata property: 121, target.object, Spa:Id, 4294967295
easyeffects: pw_metadata_manager.cpp:87 New metadata property: 144, target.node, Spa:Id, 4294967295
easyeffects: pw_metadata_manager.cpp:87 New metadata property: 144, target.object, Spa:Id, 4294967295
easyeffects: pw_metadata_manager.cpp:87 New metadata property: 140, target.node, Spa:Id, 4294967295
easyeffects: pw_metadata_manager.cpp:87 New metadata property: 140, target.object, Spa:Id, 4294967295
easyeffects: pw_metadata_manager.cpp:87 New metadata property: 121, target.node, Spa:Id, 89
easyeffects: pw_metadata_manager.cpp:87 New metadata property: 121, target.object, Spa:Id, 2503
easyeffects: pw_metadata_manager.cpp:87 New metadata property: 144, target.node, Spa:Id, 89
easyeffects: pw_metadata_manager.cpp:87 New metadata property: 144, target.object, Spa:Id, 2503
easyeffects: pw_metadata_manager.cpp:87 New metadata property: 140, target.node, Spa:Id, 89
easyeffects: pw_metadata_manager.cpp:87 New metadata property: 140, target.object, Spa:Id, 2503
easyeffects: pw_link_manager.cpp:135 Firefox port 124 is connected to easyeffects_sink port 88
easyeffects: pw_link_manager.cpp:135 Firefox port 136 is connected to easyeffects_sink port 102
easyeffects: pw_link_manager.cpp:135 Firefox port 154 is connected to easyeffects_sink port 88
easyeffects: pw_link_manager.cpp:135 Firefox port 137 is connected to easyeffects_sink port 102
easyeffects: lv2_wrapper.cpp:126 http://lsp-plug.in/plugins/lv2/comp_delay_x2_stereo requires feature: http://lv2plug.in/ns/ext/urid#map
easyeffects: pw_link_manager.cpp:135 Firefox port 103 is connected to easyeffects_sink port 88
easyeffects: pw_link_manager.cpp:135 Firefox port 100 is connected to easyeffects_sink port 102
easyeffects: plugin_base.cpp:451 sie: output_level successfully connected to PipeWire graph
easyeffects: plugin_base.cpp:451 sie: spectrum successfully connected to PipeWire graph
easyeffects: stream_input_effects.cpp:245 Before: 36 -> my_sink.output
easyeffects: pw_link_manager.cpp:135 my_sink.output port 46 is connected to port 91
easyeffects: pw_link_manager.cpp:135 my_sink.output port 47 is connected to port 95
easyeffects: pw_link_manager.cpp:135 port 99 is connected to port 130
easyeffects: pw_link_manager.cpp:135 port 98 is connected to port 90
easyeffects: pw_link_manager.cpp:135 port 94 is connected to easyeffects_source port 138
easyeffects: pw_link_manager.cpp:135 port 93 is connected to easyeffects_source port 105
easyeffects: lv2_wrapper.cpp:126 http://lsp-plug.in/plugins/lv2/comp_delay_x2_stereo requires feature: http://lv2plug.in/ns/ext/urid#map
easyeffects: plugin_base.cpp:451 soe: output_level successfully connected to PipeWire graph
easyeffects: plugin_base.cpp:451 soe: spectrum successfully connected to PipeWire graph
easyeffects: lv2_wrapper.cpp:126 http://lsp-plug.in/plugins/lv2/para_equalizer_x32_lr requires feature: http://lv2plug.in/ns/ext/urid#map
easyeffects: pw_link_manager.cpp:135 port 114 is connected to alsa_output.pci-0000_c1_00.6.analog-stereo port 64
easyeffects: pw_link_manager.cpp:135 port 113 is connected to alsa_output.pci-0000_c1_00.6.analog-stereo port 66
easyeffects: pw_link_manager.cpp:135 port 157 is connected to port 111
easyeffects: pw_link_manager.cpp:135 port 155 is connected to port 115
easyeffects: plugin_base.cpp:451 soe: equalizer successfully connected to PipeWire graph
easyeffects: pw_link_manager.cpp:135 ee_soe_equalizer port 145 is connected to port 126
easyeffects: pw_link_manager.cpp:135 ee_soe_equalizer port 156 is connected to port 159
easyeffects: pw_link_manager.cpp:135 easyeffects_sink port 117 is connected to ee_soe_equalizer port 122
easyeffects: pw_link_manager.cpp:135 easyeffects_sink port 82 is connected to ee_soe_equalizer port 141
easyeffects: presets_autoload_manager.cpp:183 Autoloading fallback preset empty for device alsa_output.pci-0000_c1_00.6.analog-stereo
easyeffects: presets_manager.cpp:520 Successfully loaded the preset: /home/me/.var/app/com.github.wwmm.easyeffects/data/easyeffects/output/empty.json
easyeffects: local_server.cpp:56 Local socket server started. Listening on the name: EasyEffectsServer
easyeffects: stream_output_effects.cpp:379 Disconnecting the equalizer filter from PipeWire
easyeffects: pw_node_manager.cpp:637 119 ee_soe_equalizer has been removed
easyeffects: equalizer.cpp:121 soe: equalizer destroyed
easyeffects: pw_link_manager.cpp:135 port 114 is connected to alsa_output.pci-0000_c1_00.6.analog-stereo port 64
easyeffects: pw_link_manager.cpp:135 port 113 is connected to alsa_output.pci-0000_c1_00.6.analog-stereo port 66
easyeffects: pw_link_manager.cpp:135 port 157 is connected to port 111
easyeffects: pw_link_manager.cpp:135 port 155 is connected to port 115
easyeffects: pw_link_manager.cpp:135 easyeffects_sink port 117 is connected to port 126
easyeffects: pw_link_manager.cpp:135 easyeffects_sink port 82 is connected to port 159
easyeffects: stream_input_effects.cpp:245 Before: 36 -> my_sink.output
easyeffects: pw_link_manager.cpp:135 my_sink.output port 46 is connected to port 91
easyeffects: pw_link_manager.cpp:135 my_sink.output port 47 is connected to port 95
easyeffects: pw_link_manager.cpp:135 port 99 is connected to port 130
easyeffects: pw_link_manager.cpp:135 port 98 is connected to port 90
easyeffects: pw_link_manager.cpp:135 port 94 is connected to easyeffects_source port 138
easyeffects: pw_link_manager.cpp:135 port 93 is connected to easyeffects_source port 105
easyeffects: main.cpp:154 Disabling global bypass
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:/qt/qml/ee/type/presets/contents/ui/PageStreamsEffects.qml:11: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.
qrc:/qt/qml/ee/type/presets/contents/ui/Main.qml:221:5: QML ShortcutsSheet: Binding loop detected for property "implicitHeight":
qrc:/qt/qml/org/kde/kirigami/templates/OverlaySheet.qml:139:5
easyeffects: pw_link_manager.cpp:135 port 114 is connected to alsa_output.pci-0000_c1_00.6.analog-stereo port 64
easyeffects: pw_link_manager.cpp:135 port 113 is connected to alsa_output.pci-0000_c1_00.6.analog-stereo port 66
easyeffects: pw_link_manager.cpp:135 port 157 is connected to port 111
easyeffects: pw_link_manager.cpp:135 port 155 is connected to port 115
easyeffects: pw_link_manager.cpp:135 easyeffects_sink port 117 is connected to port 126
easyeffects: pw_link_manager.cpp:135 easyeffects_sink port 82 is connected to port 159
easyeffects: global_shortcuts.cpp:90 D-Bus session for GlobalShortcuts created.
easyeffects: presets_autoload_manager.cpp:194 Autoloading local preset lappy_mctopface for device alsa_output.pci-0000_c1_00.6.analog-stereo
easyeffects: lv2_wrapper.cpp:126 http://lsp-plug.in/plugins/lv2/para_equalizer_x32_lr requires feature: http://lv2plug.in/ns/ext/urid#map
easyeffects: presets_manager.cpp:520 Successfully loaded the preset: /home/me/.var/app/com.github.wwmm.easyeffects/data/easyeffects/output/lappy_mctopface.json
easyeffects: pw_link_manager.cpp:135 port 114 is connected to alsa_output.pci-0000_c1_00.6.analog-stereo port 64
easyeffects: pw_link_manager.cpp:135 port 113 is connected to alsa_output.pci-0000_c1_00.6.analog-stereo port 66
easyeffects: pw_link_manager.cpp:135 port 157 is connected to port 111
easyeffects: pw_link_manager.cpp:135 port 155 is connected to port 115
easyeffects: plugin_base.cpp:451 soe: equalizer successfully connected to PipeWire graph
easyeffects: pw_link_manager.cpp:135 ee_soe_equalizer port 145 is connected to port 126
easyeffects: pw_link_manager.cpp:135 ee_soe_equalizer port 147 is connected to port 159
easyeffects: pw_link_manager.cpp:135 easyeffects_sink port 117 is connected to ee_soe_equalizer port 119
easyeffects: pw_link_manager.cpp:135 easyeffects_sink port 82 is connected to ee_soe_equalizer port 146
easyeffects: pw_node_manager.cpp:236 Stream/Input/Audio 118 with serial 2592 has been added
easyeffects: pw_node_manager.cpp:236 Stream/Input/Audio 149 with serial 2593 has been added
easyeffects: pw_node_manager.cpp:236 Stream/Input/Audio 148 with serial 2594 has been added
easyeffects: pw_node_manager.cpp:296 The input stream does not have as target the same mic used as EE input: my_sink.output
The user wants it to record from device 305. We will ignore this stream.
easyeffects: pw_node_manager.cpp:637 Stream/Input/Audio 118 has been removed
easyeffects: pw_node_manager.cpp:296 The input stream does not have as target the same mic used as EE input: my_sink.output
The user wants it to record from device 942. We will ignore this stream.
easyeffects: pw_node_manager.cpp:637 Stream/Input/Audio 149 has been removed
easyeffects: pw_node_manager.cpp:296 The input stream does not have as target the same mic used as EE input: my_sink.output
The user wants it to record from device 2170. We will ignore this stream.
easyeffects: pw_node_manager.cpp:637 Stream/Input/Audio 148 has been removed
easyeffects: pw_link_manager.cpp:135 Firefox port 103 is connected to port 165
easyeffects: pw_link_manager.cpp:135 Firefox port 100 is connected to port 162
easyeffects: pw_link_manager.cpp:135 Firefox port 124 is connected to port 151
easyeffects: pw_link_manager.cpp:135 Firefox port 136 is connected to port 168
easyeffects: pw_link_manager.cpp:135 Firefox port 154 is connected to port 172
easyeffects: pw_link_manager.cpp:135 Firefox port 137 is connected to port 174
easyeffects: pw_metadata_manager.cpp:87 New metadata property: 140, target.node, Spa:Id, 37
easyeffects: pw_metadata_manager.cpp:87 New metadata property: 140, target.object, Spa:Id, 37
easyeffects: pw_link_manager.cpp:135 Firefox port 154 is connected to my_sink port 50
easyeffects: pw_link_manager.cpp:135 Firefox port 137 is connected to my_sink port 52
easyeffects: pw_metadata_manager.cpp:87 New metadata property: 140, target.node, Spa:Id, 89
easyeffects: pw_metadata_manager.cpp:87 New metadata property: 140, target.object, Spa:Id, 2503
easyeffects: pw_metadata_manager.cpp:87 New metadata property: 140, target.node, ,
easyeffects: pw_metadata_manager.cpp:87 New metadata property: 140, target.object, ,
easyeffects: pw_link_manager.cpp:135 Firefox port 154 is connected to alsa_output.pci-0000_c1_00.6.analog-stereo port 64
easyeffects: pw_link_manager.cpp:135 Firefox port 137 is connected to alsa_output.pci-0000_c1_00.6.analog-stereo port 66
easyeffects: pw_metadata_manager.cpp:87 New metadata property: 140, target.node, Spa:Id, 89
easyeffects: pw_metadata_manager.cpp:87 New metadata property: 140, target.object, Spa:Id, 2503
easyeffects: pw_link_manager.cpp:135 Firefox port 154 is connected to easyeffects_sink port 88
easyeffects: pw_link_manager.cpp:135 Firefox port 137 is connected to easyeffects_sink port 102
easyeffects: stream_input_effects.cpp:204 No app linked to our device wants to play. Unlinking our filters.
easyeffects: stream_output_effects.cpp:197 No app linked to our device wants to play. Unlinking our filters.
easyeffects: stream_output_effects.cpp:379 Disconnecting the equalizer filter from PipeWire
easyeffects: pw_node_manager.cpp:637 123 ee_soe_equalizer has been removed
^Ceasyeffects: db_manager.cpp:125 Saving settings...
~ % easyeffects: main.cpp:225 Asking Qt to clear QML's engine cache 130
easyeffects: effects_base.cpp:113 effects_base: destroyed
easyeffects: equalizer.cpp:121 soe: equalizer destroyed
easyeffects: spectrum.cpp:103 soe: spectrum destroyed
easyeffects: output_level.cpp:39 soe: output_level destroyed
easyeffects: effects_base.cpp:113 effects_base: destroyed
easyeffects: spectrum.cpp:103 sie: spectrum destroyed
easyeffects: output_level.cpp:39 sie: output_level destroyed
easyeffects: test_signals.cpp:247 TestSignals destroyed
easyeffects: pw_metadata_manager.cpp:139 Destroying PipeWire metadata...
easyeffects: pw_manager.cpp:394 Destroying PipeWire registry...
easyeffects: pw_manager.cpp:397 Disconnecting PipeWire core...
easyeffects: pw_node_manager.cpp:637 Audio/Source 36 my_sink.output has been removed
easyeffects: pw_node_manager.cpp:637 Audio/Sink 37 my_sink has been removed
easyeffects: pw_node_manager.cpp:637 Audio/Sink 62 alsa_output.pci-0000_c1_00.6.analog-stereo has been removed
easyeffects: pw_node_manager.cpp:637 Audio/Source 63 alsa_input.pci-0000_c1_00.6.analog-stereo has been removed
easyeffects: pw_node_manager.cpp:637 Stream/Output/Audio 121 Firefox has been removed
easyeffects: pw_node_manager.cpp:637 Stream/Output/Audio 144 Firefox has been removed
easyeffects: pw_node_manager.cpp:637 Stream/Output/Audio 140 Firefox has been removed
easyeffects: pw_node_manager.cpp:637 EE/Audio/Sink 89 easyeffects_sink has been removed
easyeffects: pw_node_manager.cpp:637 EE/Audio/Source 87 easyeffects_source has been removed
easyeffects: pw_manager.cpp:402 Stopping PipeWire's loop...
easyeffects: pw_manager.cpp:405 Destroying PipeWire's context...
easyeffects: pw_manager.cpp:408 Destroying PipeWire's loop...
easyeffects: db_manager.cpp:125 Saving settings...
Additional Information
No response
It is a long story but the old behavior was inconsistent. There was a fusion of manual and automated control that could be misleading in some cases. And to be honest the implementation that allowed the old behavior was not computationally efficient. We moved some streams to our virtual device to later realize we should remove them from there.
Now if manual control is needed this has to be changed in our preferences window. Just turn off Process all input/output streams accordingly. If you open our shortcuts window you will also see we added a keyboard shortcut for people that need a fast way to temporarily switch to manual control mode.
There was a fusion of manual and automated control that could be misleading in some cases.
For example some users saw Process all input/output streams in our preferences window and thought "EasyEffects will force streams to be processed". But it actually tried that only the first time it saw the stream. If something moved the stream away from us it would never come back. And there were actually cases where a third party toll took streams away from EasyEffects without the user being aware of it.
Also experiencing this, and it's happening with both "Process all output/input streams" options unchecked. The update to 8.0 seems to have gone incredibly sideways for me (I also lost all my previous effects/settings) on Garuda (Arch). I'm having an absolute time trying to get my old effects set back up from scratch, but this problem here with the Easy Effects Sink forcefully grabbing things makes it literally unusable for me at the moment.
Also experiencing this, and it's happening with both "Process all output/input streams" options unchecked.
I checked it again and I do not see this happening. But EasyEffects isn't the only one that can do this. WirePlumber has a feature where it tries to restore a stream to the device it was using previously. So there are situations where it is necessary to manually move the application to a different device to force WirePlumber to forget the association.
I also lost all my previous effects/settings
Did you save preset files? The current version is compatible with presets made by the 7.x versions. If not you may still be able to get some of your previous settings if you install dconf-editor and search for EasyEffects keys there.
For example some users saw
Process all input/output streamsin our preferences window and thought "EasyEffects will force streams to be processed". But it actually tried that only the first time it saw the stream. If something moved the stream away from us it would never come back. And there were actually cases where a third party toll took streams away from EasyEffects without the user being aware of it.
I think this is actually more intuitive behaviour, to set the output to Easy Effects Sink but only once when the stream is seen for the first time. I'd personally prefer this behaviour back. If the user screws about with the output, they should know what they are doing. As for another tool screwing around with it, I wouldn't expect EasyEffects to make that its own problem.
I don't believe its acceptable to have to turn off "process all output streams" because that requires me to opt-in everything but one app, as opposed to only opting out one and everything else being automatic.