wwmm / easyeffects

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

Unity3D app's "FMOD Ex App" output doesn't connect to Easy Effects Sink and is ignored by Easy Effects for different target name #3358

Closed huantianad closed 1 month ago

huantianad commented 1 month ago

EasyEffects Version

7.1.8

What package are you using?

NixOS

Distribution

NixOS Unstable: Linux 6.10.6, NixOS, 24.11 (Vicuna), 24.11.20240828.71e91c4

Describe the bug

When running a Unity3D application or game, that seems to being using FMOD given that the application's output is named "FMOD Ex App", the application's sound does not go through easyeffects. The output remains connected directly to the default output device.

This seems to be because easyeffects (falsely) detects that the application is outputting to a different device than easyeffects is set to:

(easyeffects:81448): easyeffects-DEBUG: 20:15:15.465:   pipe_manager.cpp:360    The output stream FMOD Ex App does not have as target the same output device used as EE: alsa_output.usb-FIIO_FIIO_KA11-01.analog-stereo
 The user wants it to play to device alsa_output.usb-FIIO_FIIO_KA11-01.analog-stereo. We will ignore this stream.

Relevant code for quick access: https://github.com/wwmm/easyeffects/blob/3085129a1bf993e331098ae3a85dde59dc105159/src/pipe_manager.cpp#L341C1-L367C4

Looking at the string comparison done here, it seems like the names are being compared by reference. I'm unfamiliar with the audio systems at play here; could perhaps the issue be that the application is making a copy of the output name, instead of using the exact string? Is that to be expected, or an issue on application end? I don't know why I was thinking C instead of C++ haha

Debug Log

Debug Log
``` (process:81448): easyeffects-DEBUG: 20:15:14.204: easyeffects.cpp:46 easyeffects version: 7.1.8 (process:81448): easyeffects-DEBUG: 20:15:14.205: easyeffects.cpp:56 locale directory: /nix/store/267lprq7zh23sssc8wc8mlm5qn35p816-easyeffects-7.1.8/share/locale (easyeffects:81448): easyeffects-DEBUG: 20:15:14.208: presets_manager.cpp:238 user presets directory already exists: /home/huantian/.config/easyeffects/input (easyeffects:81448): easyeffects-DEBUG: 20:15:14.208: presets_manager.cpp:238 user presets directory already exists: /home/huantian/.config/easyeffects/output (easyeffects:81448): easyeffects-DEBUG: 20:15:14.208: presets_manager.cpp:238 user presets directory already exists: /home/huantian/.config/easyeffects/irs (easyeffects:81448): easyeffects-DEBUG: 20:15:14.208: presets_manager.cpp:238 user presets directory already exists: /home/huantian/.config/easyeffects/rnnoise (easyeffects:81448): easyeffects-DEBUG: 20:15:14.208: presets_manager.cpp:238 user presets directory already exists: /home/huantian/.config/easyeffects/autoload/input (easyeffects:81448): easyeffects-DEBUG: 20:15:14.208: presets_manager.cpp:238 user presets directory already exists: /home/huantian/.config/easyeffects/autoload/output (easyeffects:81448): Adwaita-WARNING **: 20:15:14.573: Using GtkSettings:gtk-application-prefer-dark-theme with libadwaita is unsupported. Please use AdwStyleManager:color-scheme instead. (easyeffects:81448): easyeffects-DEBUG: 20:15:14.635: pipe_manager.cpp:1566 compiled with PipeWire: 1.2.2 (easyeffects:81448): easyeffects-DEBUG: 20:15:14.635: pipe_manager.cpp:1567 linked to PipeWire: 1.2.2 (easyeffects:81448): easyeffects-DEBUG: 20:15:14.639: pipe_manager.cpp:1537 core version: 1.2.2 (easyeffects:81448): easyeffects-DEBUG: 20:15:14.639: pipe_manager.cpp:1538 core name: pipewire-0 (easyeffects:81448): easyeffects-DEBUG: 20:15:14.639: pipe_manager.cpp:1449 found metadata: settings (easyeffects:81448): easyeffects-DEBUG: 20:15:14.639: pipe_manager.cpp:1449 found metadata: schema-sm-settings (easyeffects:81448): easyeffects-DEBUG: 20:15:14.639: pipe_manager.cpp:1449 found metadata: persistent-sm-settings (easyeffects:81448): easyeffects-DEBUG: 20:15:14.639: pipe_manager.cpp:1449 found metadata: sm-settings (easyeffects:81448): easyeffects-DEBUG: 20:15:14.639: pipe_manager.cpp:1449 found metadata: sm-objects (easyeffects:81448): easyeffects-DEBUG: 20:15:14.639: pipe_manager.cpp:1449 found metadata: default (easyeffects:81448): easyeffects-DEBUG: 20:15:14.639: pipe_manager.cpp:1449 found metadata: filters (easyeffects:81448): easyeffects-DEBUG: 20:15:14.639: pipe_manager.cpp:1449 found metadata: route-settings (easyeffects:81448): easyeffects-DEBUG: 20:15:14.639: pipe_manager.cpp:1303 Audio/Sink 52 alsa_output.usb-FIIO_FIIO_KA11-01.analog-stereo with serial 485 has been added (easyeffects:81448): easyeffects-DEBUG: 20:15:14.639: pipe_manager.cpp:1303 Stream/Output/Audio 154 Chromium with serial 2508 has been added (easyeffects:81448): easyeffects-DEBUG: 20:15:14.639: pipe_manager.cpp:1303 Stream/Input/Audio 112 with serial 6738 has been added (easyeffects:81448): easyeffects-DEBUG: 20:15:14.639: pipe_manager.cpp:1303 Stream/Input/Audio 114 with serial 6739 has been added (easyeffects:81448): easyeffects-DEBUG: 20:15:14.639: pipe_manager.cpp:1303 Stream/Input/Audio 54 with serial 6769 has been added (easyeffects:81448): easyeffects-DEBUG: 20:15:14.639: pipe_manager.cpp:1303 Stream/Input/Audio 152 with serial 6770 has been added (easyeffects:81448): easyeffects-DEBUG: 20:15:14.639: pipe_manager.cpp:1303 Stream/Input/Audio 155 with serial 6805 has been added (easyeffects:81448): easyeffects-DEBUG: 20:15:14.639: pipe_manager.cpp:1303 Stream/Input/Audio 201 with serial 6806 has been added (easyeffects:81448): easyeffects-DEBUG: 20:15:14.639: pipe_manager.cpp:1303 Stream/Output/Audio 124 LibreWolf with serial 6873 has been added (easyeffects:81448): easyeffects-DEBUG: 20:15:14.639: pipe_manager.cpp:1303 Stream/Input/Audio 133 with serial 7103 has been added (easyeffects:81448): easyeffects-DEBUG: 20:15:14.639: pipe_manager.cpp:1303 Stream/Input/Audio 169 with serial 7104 has been added (easyeffects:81448): easyeffects-DEBUG: 20:15:14.639: pipe_manager.cpp:1303 Stream/Output/Audio 171 LibreWolf with serial 9499 has been added (easyeffects:81448): easyeffects-DEBUG: 20:15:14.639: pipe_manager.cpp:1303 Stream/Output/Audio 65 FMOD Ex App with serial 10033 has been added (easyeffects:81448): easyeffects-DEBUG: 20:15:14.639: pipe_manager.cpp:1343 FMOD Ex App port 92 is connected to alsa_output.usb-FIIO_FIIO_KA11-01.analog-stereo port 130 (easyeffects:81448): easyeffects-DEBUG: 20:15:14.639: pipe_manager.cpp:1343 FMOD Ex App port 90 is connected to alsa_output.usb-FIIO_FIIO_KA11-01.analog-stereo port 119 (easyeffects:81448): easyeffects-DEBUG: 20:15:14.639: pipe_manager.cpp:1343 Chromium port 96 is connected to alsa_output.usb-FIIO_FIIO_KA11-01.analog-stereo port 130 (easyeffects:81448): easyeffects-DEBUG: 20:15:14.639: pipe_manager.cpp:1343 Chromium port 157 is connected to alsa_output.usb-FIIO_FIIO_KA11-01.analog-stereo port 119 (easyeffects:81448): easyeffects-DEBUG: 20:15:14.639: pipe_manager.cpp:1343 LibreWolf port 203 is connected to alsa_output.usb-FIIO_FIIO_KA11-01.analog-stereo port 130 (easyeffects:81448): easyeffects-DEBUG: 20:15:14.639: pipe_manager.cpp:1343 LibreWolf port 128 is connected to alsa_output.usb-FIIO_FIIO_KA11-01.analog-stereo port 119 (easyeffects:81448): easyeffects-DEBUG: 20:15:14.639: pipe_manager.cpp:1343 LibreWolf port 59 is connected to alsa_output.usb-FIIO_FIIO_KA11-01.analog-stereo port 130 (easyeffects:81448): easyeffects-DEBUG: 20:15:14.639: pipe_manager.cpp:1343 LibreWolf port 185 is connected to alsa_output.usb-FIIO_FIIO_KA11-01.analog-stereo port 119 (easyeffects:81448): easyeffects-DEBUG: 20:15:14.639: pipe_manager.cpp:1303 Audio/Sink 64 easyeffects_sink with serial 12624 has been added (easyeffects:81448): easyeffects-DEBUG: 20:15:14.639: pipe_manager.cpp:1303 Audio/Source/Virtual 172 easyeffects_source with serial 12625 has been added (easyeffects:81448): easyeffects-DEBUG: 20:15:14.640: pipe_manager.cpp:1039 new metadata property: 0, default.configured.audio.sink, Spa:String:JSON, {"name":"alsa_output.usb-FIIO_FIIO_KA11-01.pro-output-0"} (easyeffects:81448): easyeffects-DEBUG: 20:15:14.640: pipe_manager.cpp:1039 new metadata property: 0, default.configured.audio.source, Spa:String:JSON, {"name":"alsa_input.pci-0000_0b_00.4.analog-stereo"} (easyeffects:81448): easyeffects-DEBUG: 20:15:14.640: pipe_manager.cpp:1039 new metadata property: 0, default.audio.sink, Spa:String:JSON, {"name":"alsa_output.usb-FIIO_FIIO_KA11-01.analog-stereo"} (easyeffects:81448): easyeffects-DEBUG: 20:15:14.640: pipe_manager.cpp:1039 new metadata property: 0, default.audio.source, Spa:String:JSON, {"name":"alsa_output.usb-FIIO_FIIO_KA11-01.analog-stereo"} (easyeffects:81448): easyeffects-DEBUG: 20:15:14.640: pipe_manager.cpp:1039 new metadata property: 154, target.node, Spa:Id, 75 (easyeffects:81448): easyeffects-DEBUG: 20:15:14.640: pipe_manager.cpp:1039 new metadata property: 154, target.object, Spa:Id, 11067 (easyeffects:81448): easyeffects-DEBUG: 20:15:14.640: pipe_manager.cpp:1039 new metadata property: 124, target.node, Spa:Id, 75 (easyeffects:81448): easyeffects-DEBUG: 20:15:14.640: pipe_manager.cpp:1039 new metadata property: 124, target.object, Spa:Id, 11067 (easyeffects:81448): easyeffects-DEBUG: 20:15:14.640: pipe_manager.cpp:1039 new metadata property: 171, target.node, Spa:Id, 75 (easyeffects:81448): easyeffects-DEBUG: 20:15:14.640: pipe_manager.cpp:1039 new metadata property: 171, target.object, Spa:Id, 11067 (easyeffects:81448): easyeffects-DEBUG: 20:15:14.640: pipe_manager.cpp:1039 new metadata property: 65, target.node, Spa:Id, -1 'spa_pod_is_array(pod)' failed at /nix/store/K0GW31V92ZN31HQMXQDY1H5H3VF4M6XC-pipewire-1.2.2-dev/include/spa-0.2/spa/pod/iter.h:325 spa_pod_get_array() (easyeffects:81448): easyeffects-DEBUG: 20:15:14.640: pipe_manager.cpp:1665 easyeffects_sink node successfully retrieved with id 64 and serial 12624 (easyeffects:81448): easyeffects-DEBUG: 20:15:14.640: pipe_manager.cpp:1670 easyeffects_source node successfully retrieved with id 172 and serial 12625 (easyeffects:81448): easyeffects-DEBUG: 20:15:14.645: plugin_base.cpp:406 soe: output_level successfully connected to PipeWire graph (easyeffects:81448): easyeffects-DEBUG: 20:15:14.646: plugin_base.cpp:406 soe: spectrum successfully connected to PipeWire graph (easyeffects:81448): easyeffects-DEBUG: 20:15:14.681: lv2_wrapper.cpp:124 http://lsp-plug.in/plugins/lv2/para_equalizer_x32_lr requires feature: http://lv2plug.in/ns/ext/urid#map (easyeffects:81448): easyeffects-DEBUG: 20:15:14.693: plugin_base.cpp:406 soe: equalizer successfully connected to PipeWire graph (easyeffects:81448): easyeffects-DEBUG: 20:15:14.693: pipe_manager.cpp:1343 easyeffects_sink port 134 is connected to ee_soe_equalizer port 76 (easyeffects:81448): easyeffects-DEBUG: 20:15:14.694: pipe_manager.cpp:1343 easyeffects_sink port 106 is connected to ee_soe_equalizer port 146 (easyeffects:81448): easyeffects-DEBUG: 20:15:14.694: pipe_manager.cpp:1346 No node with id 78 in our node_map (easyeffects:81448): easyeffects-DEBUG: 20:15:14.694: pipe_manager.cpp:1346 No node with id 78 in our node_map (easyeffects:81448): easyeffects-DEBUG: 20:15:14.695: pipe_manager.cpp:1346 No node with id 104 in our node_map (easyeffects:81448): easyeffects-DEBUG: 20:15:14.697: pipe_manager.cpp:1346 No node with id 104 in our node_map (easyeffects:81448): easyeffects-DEBUG: 20:15:14.697: pipe_manager.cpp:1346 No node with id 104 in our node_map (easyeffects:81448): easyeffects-DEBUG: 20:15:14.698: pipe_manager.cpp:1346 No node with id 104 in our node_map (easyeffects:81448): easyeffects-DEBUG: 20:15:14.702: plugin_base.cpp:406 sie: output_level successfully connected to PipeWire graph (easyeffects:81448): easyeffects-DEBUG: 20:15:14.704: plugin_base.cpp:406 sie: spectrum successfully connected to PipeWire graph (easyeffects:81448): easyeffects-DEBUG: 20:15:14.704: pipe_manager.cpp:1346 No node with id 142 in our node_map (easyeffects:81448): easyeffects-DEBUG: 20:15:14.705: pipe_manager.cpp:1346 No node with id 142 in our node_map (easyeffects:81448): easyeffects-DEBUG: 20:15:14.706: pipe_manager.cpp:1346 No node with id 135 in our node_map (easyeffects:81448): easyeffects-DEBUG: 20:15:14.706: pipe_manager.cpp:1346 No node with id 135 in our node_map (easyeffects:81448): easyeffects-DEBUG: 20:15:14.724: pipe_manager.cpp:1346 No node with id 135 in our node_map (easyeffects:81448): easyeffects-DEBUG: 20:15:14.724: pipe_manager.cpp:1346 No node with id 135 in our node_map (easyeffects:81448): easyeffects-DEBUG: 20:15:14.724: stream_output_effects.cpp:302 disconnecting the equalizer filter from PipeWire (easyeffects:81448): easyeffects-DEBUG: 20:15:14.725: output_level.cpp:45 soe: output_level: PipeWire blocksize: 64 (easyeffects:81448): easyeffects-DEBUG: 20:15:14.725: output_level.cpp:46 soe: output_level: PipeWire sampling rate: 48000 (easyeffects:81448): easyeffects-DEBUG: 20:15:14.727: pipe_manager.cpp:265 97 ee_soe_equalizer has been removed (easyeffects:81448): easyeffects-DEBUG: 20:15:14.728: output_level.cpp:45 sie: output_level: PipeWire blocksize: 64 (easyeffects:81448): easyeffects-DEBUG: 20:15:14.728: output_level.cpp:46 sie: output_level: PipeWire sampling rate: 48000 (easyeffects:81448): easyeffects-DEBUG: 20:15:14.734: plugin_base.cpp:406 soe: equalizer successfully connected to PipeWire graph (easyeffects:81448): easyeffects-DEBUG: 20:15:14.734: pipe_manager.cpp:1343 easyeffects_sink port 134 is connected to ee_soe_equalizer port 72 (easyeffects:81448): easyeffects-DEBUG: 20:15:14.734: pipe_manager.cpp:1343 easyeffects_sink port 106 is connected to ee_soe_equalizer port 71 (easyeffects:81448): easyeffects-DEBUG: 20:15:14.735: pipe_manager.cpp:1346 No node with id 78 in our node_map (easyeffects:81448): easyeffects-DEBUG: 20:15:14.735: pipe_manager.cpp:1346 No node with id 78 in our node_map (easyeffects:81448): easyeffects-DEBUG: 20:15:14.736: pipe_manager.cpp:1346 No node with id 104 in our node_map (easyeffects:81448): easyeffects-DEBUG: 20:15:14.736: pipe_manager.cpp:1346 No node with id 104 in our node_map (easyeffects:81448): easyeffects-DEBUG: 20:15:14.737: pipe_manager.cpp:1346 No node with id 104 in our node_map (easyeffects:81448): easyeffects-DEBUG: 20:15:14.738: pipe_manager.cpp:1346 No node with id 104 in our node_map (easyeffects:81448): easyeffects-DEBUG: 20:15:14.741: pipe_manager.cpp:1346 No node with id 142 in our node_map (easyeffects:81448): easyeffects-DEBUG: 20:15:14.741: pipe_manager.cpp:1346 No node with id 142 in our node_map (easyeffects:81448): easyeffects-DEBUG: 20:15:14.742: pipe_manager.cpp:1346 No node with id 135 in our node_map (easyeffects:81448): easyeffects-DEBUG: 20:15:14.742: pipe_manager.cpp:1346 No node with id 135 in our node_map (easyeffects:81448): easyeffects-DEBUG: 20:15:14.742: pipe_manager.cpp:1346 No node with id 135 in our node_map (easyeffects:81448): easyeffects-DEBUG: 20:15:14.743: pipe_manager.cpp:1346 No node with id 135 in our node_map easyeffects-INFO: 20:15:14.744: application.cpp:76 disabling global bypass (easyeffects:81448): easyeffects-DEBUG: 20:15:14.750: application_ui.cpp:109 Icon Theme breeze-dark detected (easyeffects:81448): easyeffects-DEBUG: 20:15:15.231: app_info.cpp:178 cannot lookup application icon fmod ex app in /usr/share/pixmaps (easyeffects:81448): easyeffects-DEBUG: 20:15:15.231: app_info.cpp:178 cannot lookup application icon fmod ex app in /usr/local/share/pixmaps (easyeffects:81448): easyeffects-DEBUG: 20:15:15.423: stream_output_effects.cpp:302 disconnecting the equalizer filter from PipeWire (easyeffects:81448): easyeffects-DEBUG: 20:15:15.425: pipe_manager.cpp:265 110 ee_soe_equalizer has been removed (easyeffects:81448): easyeffects-DEBUG: 20:15:15.429: plugin_base.cpp:406 soe: equalizer successfully connected to PipeWire graph (easyeffects:81448): easyeffects-DEBUG: 20:15:15.430: pipe_manager.cpp:1343 easyeffects_sink port 134 is connected to ee_soe_equalizer port 146 (easyeffects:81448): easyeffects-DEBUG: 20:15:15.430: pipe_manager.cpp:1343 easyeffects_sink port 106 is connected to ee_soe_equalizer port 76 (easyeffects:81448): easyeffects-DEBUG: 20:15:15.430: pipe_manager.cpp:1346 No node with id 78 in our node_map (easyeffects:81448): easyeffects-DEBUG: 20:15:15.431: pipe_manager.cpp:1346 No node with id 78 in our node_map (easyeffects:81448): easyeffects-DEBUG: 20:15:15.431: pipe_manager.cpp:1346 No node with id 104 in our node_map (easyeffects:81448): easyeffects-DEBUG: 20:15:15.432: pipe_manager.cpp:1346 No node with id 104 in our node_map (easyeffects:81448): easyeffects-DEBUG: 20:15:15.432: pipe_manager.cpp:1346 No node with id 104 in our node_map (easyeffects:81448): easyeffects-DEBUG: 20:15:15.433: pipe_manager.cpp:1346 No node with id 104 in our node_map (easyeffects:81448): easyeffects-DEBUG: 20:15:15.434: pipe_manager.cpp:1039 new metadata property: 154, target.node, Spa:Id, 64 (easyeffects:81448): easyeffects-DEBUG: 20:15:15.434: pipe_manager.cpp:1039 new metadata property: 154, target.object, Spa:Id, 12624 (easyeffects:81448): easyeffects-DEBUG: 20:15:15.434: application.cpp:104 new default output device: alsa_output.usb-FIIO_FIIO_KA11-01.analog-stereo (easyeffects:81448): easyeffects-DEBUG: 20:15:15.434: application.cpp:112 new default input device: alsa_output.usb-FIIO_FIIO_KA11-01.analog-stereo (easyeffects:81448): easyeffects-DEBUG: 20:15:15.435: app_info.cpp:178 cannot lookup application icon fmod ex app in /usr/share/pixmaps (easyeffects:81448): easyeffects-DEBUG: 20:15:15.435: app_info.cpp:178 cannot lookup application icon fmod ex app in /usr/local/share/pixmaps (easyeffects:81448): easyeffects-DEBUG: 20:15:15.435: application.cpp:150 output autoloading: device "alsa_card.pci-0000_09_00.1" has changed its output route to "hdmi-output-0" (easyeffects:81448): easyeffects-DEBUG: 20:15:15.435: application.cpp:163 output autoloading: skip "alsa_output.usb-FIIO_FIIO_KA11-01.analog-stereo" candidate since it does not match "alsa_output.usb-FIIO_FIIO_KA11-01.analog-stereo" output device (easyeffects:81448): easyeffects-DEBUG: 20:15:15.435: application.cpp:163 output autoloading: skip "Chromium" candidate since it does not match "alsa_output.usb-FIIO_FIIO_KA11-01.analog-stereo" output device (easyeffects:81448): easyeffects-DEBUG: 20:15:15.435: application.cpp:163 output autoloading: skip "" candidate since it does not match "alsa_output.usb-FIIO_FIIO_KA11-01.analog-stereo" output device (easyeffects:81448): easyeffects-DEBUG: 20:15:15.435: application.cpp:163 output autoloading: skip "" candidate since it does not match "alsa_output.usb-FIIO_FIIO_KA11-01.analog-stereo" output device (easyeffects:81448): easyeffects-DEBUG: 20:15:15.436: application.cpp:163 output autoloading: skip "" candidate since it does not match "alsa_output.usb-FIIO_FIIO_KA11-01.analog-stereo" output device (easyeffects:81448): easyeffects-DEBUG: 20:15:15.436: application.cpp:163 output autoloading: skip "" candidate since it does not match "alsa_output.usb-FIIO_FIIO_KA11-01.analog-stereo" output device (easyeffects:81448): easyeffects-DEBUG: 20:15:15.436: application.cpp:163 output autoloading: skip "" candidate since it does not match "alsa_output.usb-FIIO_FIIO_KA11-01.analog-stereo" output device (easyeffects:81448): easyeffects-DEBUG: 20:15:15.436: application.cpp:163 output autoloading: skip "" candidate since it does not match "alsa_output.usb-FIIO_FIIO_KA11-01.analog-stereo" output device (easyeffects:81448): easyeffects-DEBUG: 20:15:15.436: application.cpp:163 output autoloading: skip "LibreWolf" candidate since it does not match "alsa_output.usb-FIIO_FIIO_KA11-01.analog-stereo" output device (easyeffects:81448): easyeffects-DEBUG: 20:15:15.436: application.cpp:163 output autoloading: skip "" candidate since it does not match "alsa_output.usb-FIIO_FIIO_KA11-01.analog-stereo" output device (easyeffects:81448): easyeffects-DEBUG: 20:15:15.436: application.cpp:163 output autoloading: skip "" candidate since it does not match "alsa_output.usb-FIIO_FIIO_KA11-01.analog-stereo" output device (easyeffects:81448): easyeffects-DEBUG: 20:15:15.436: application.cpp:163 output autoloading: skip "LibreWolf" candidate since it does not match "alsa_output.usb-FIIO_FIIO_KA11-01.analog-stereo" output device (easyeffects:81448): easyeffects-DEBUG: 20:15:15.436: application.cpp:163 output autoloading: skip "FMOD Ex App" candidate since it does not match "alsa_output.usb-FIIO_FIIO_KA11-01.analog-stereo" output device (easyeffects:81448): easyeffects-DEBUG: 20:15:15.436: application.cpp:163 output autoloading: skip "easyeffects_sink" candidate since it does not match "alsa_output.usb-FIIO_FIIO_KA11-01.analog-stereo" output device (easyeffects:81448): easyeffects-DEBUG: 20:15:15.436: application.cpp:163 output autoloading: skip "easyeffects_source" candidate since it does not match "alsa_output.usb-FIIO_FIIO_KA11-01.analog-stereo" output device (easyeffects:81448): easyeffects-DEBUG: 20:15:15.436: application.cpp:163 output autoloading: skip "ee_soe_equalizer" candidate since it does not match "alsa_output.usb-FIIO_FIIO_KA11-01.analog-stereo" output device (easyeffects:81448): easyeffects-DEBUG: 20:15:15.436: application.cpp:168 output autoloading: no target nodes match the output device name "alsa_output.usb-FIIO_FIIO_KA11-01.analog-stereo" (easyeffects:81448): easyeffects-DEBUG: 20:15:15.436: application.cpp:150 output autoloading: device "alsa_card.usb-FIIO_FIIO_KA11-01" has changed its output route to "analog-output" (easyeffects:81448): easyeffects-DEBUG: 20:15:15.436: application.cpp:157 output autoloading: target node "alsa_output.usb-FIIO_FIIO_KA11-01.analog-stereo" matches the output device name (easyeffects:81448): easyeffects-DEBUG: 20:15:15.436: app_info.cpp:178 cannot lookup application icon fmod ex app in /usr/share/pixmaps (easyeffects:81448): easyeffects-DEBUG: 20:15:15.436: app_info.cpp:178 cannot lookup application icon fmod ex app in /usr/local/share/pixmaps (easyeffects:81448): easyeffects-DEBUG: 20:15:15.436: app_info.cpp:178 cannot lookup application icon fmod ex app in /usr/share/pixmaps (easyeffects:81448): easyeffects-DEBUG: 20:15:15.436: app_info.cpp:178 cannot lookup application icon fmod ex app in /usr/local/share/pixmaps (easyeffects:81448): easyeffects-DEBUG: 20:15:15.448: pipe_manager.cpp:1039 new metadata property: 124, target.node, Spa:Id, 64 (easyeffects:81448): easyeffects-DEBUG: 20:15:15.448: pipe_manager.cpp:1039 new metadata property: 124, target.object, Spa:Id, 12624 (easyeffects:81448): easyeffects-DEBUG: 20:15:15.448: pipe_manager.cpp:1039 new metadata property: 171, target.node, Spa:Id, 64 (easyeffects:81448): easyeffects-DEBUG: 20:15:15.448: pipe_manager.cpp:1039 new metadata property: 171, target.object, Spa:Id, 12624 (easyeffects:81448): easyeffects-DEBUG: 20:15:15.448: pipe_manager.cpp:1039 new metadata property: 65, target.node, Spa:Id, 64 (easyeffects:81448): easyeffects-DEBUG: 20:15:15.448: pipe_manager.cpp:1039 new metadata property: 65, target.object, Spa:Id, 12624 (easyeffects:81448): easyeffects-DEBUG: 20:15:15.448: pipe_manager.cpp:1343 Chromium port 96 is connected to easyeffects_sink port 102 (easyeffects:81448): easyeffects-DEBUG: 20:15:15.448: pipe_manager.cpp:1343 Chromium port 157 is connected to easyeffects_sink port 105 'spa_pod_is_array(pod)' failed at /nix/store/K0GW31V92ZN31HQMXQDY1H5H3VF4M6XC-pipewire-1.2.2-dev/include/spa-0.2/spa/pod/iter.h:325 spa_pod_get_array() (easyeffects:81448): easyeffects-DEBUG: 20:15:15.452: pipe_manager.cpp:1343 LibreWolf port 203 is connected to easyeffects_sink port 102 (easyeffects:81448): easyeffects-DEBUG: 20:15:15.452: pipe_manager.cpp:1343 LibreWolf port 128 is connected to easyeffects_sink port 105 'spa_pod_is_array(pod)' failed at /nix/store/K0GW31V92ZN31HQMXQDY1H5H3VF4M6XC-pipewire-1.2.2-dev/include/spa-0.2/spa/pod/iter.h:325 spa_pod_get_array() (easyeffects:81448): easyeffects-DEBUG: 20:15:15.455: pipe_manager.cpp:1343 LibreWolf port 59 is connected to easyeffects_sink port 102 (easyeffects:81448): easyeffects-DEBUG: 20:15:15.455: pipe_manager.cpp:1343 LibreWolf port 185 is connected to easyeffects_sink port 105 'spa_pod_is_array(pod)' failed at /nix/store/K0GW31V92ZN31HQMXQDY1H5H3VF4M6XC-pipewire-1.2.2-dev/include/spa-0.2/spa/pod/iter.h:325 spa_pod_get_array() (easyeffects:81448): easyeffects-DEBUG: 20:15:15.464: pipe_manager.cpp:1343 FMOD Ex App port 92 is connected to easyeffects_sink port 102 (easyeffects:81448): easyeffects-DEBUG: 20:15:15.464: pipe_manager.cpp:1343 FMOD Ex App port 90 is connected to easyeffects_sink port 105 'spa_pod_is_array(pod)' failed at /nix/store/K0GW31V92ZN31HQMXQDY1H5H3VF4M6XC-pipewire-1.2.2-dev/include/spa-0.2/spa/pod/iter.h:325 spa_pod_get_array() (easyeffects:81448): easyeffects-DEBUG: 20:15:15.465: pipe_manager.cpp:360 The output stream FMOD Ex App does not have as target the same output device used as EE: alsa_output.usb-FIIO_FIIO_KA11-01.analog-stereo The user wants it to play to device alsa_output.usb-FIIO_FIIO_KA11-01.analog-stereo. We will ignore this stream. (easyeffects:81448): easyeffects-DEBUG: 20:15:15.465: pipe_manager.cpp:424 Stream/Output/Audio 65 FMOD Ex App has been removed (easyeffects:81448): easyeffects-DEBUG: 20:15:15.466: app_info.cpp:377 FMOD Ex App disposed (easyeffects:81448): easyeffects-DEBUG: 20:15:15.466: app_info.cpp:385 FMOD Ex App finalized (easyeffects:81448): easyeffects-DEBUG: 20:15:15.466: app_info.cpp:63 data struct destroyed (easyeffects:81448): easyeffects-DEBUG: 20:15:15.466: node_info_holder.cpp:104 65, FMOD Ex App finalized (easyeffects:81448): easyeffects-DEBUG: 20:15:15.491: pipe_manager.cpp:1039 new metadata property: 65, target.node, , (easyeffects:81448): easyeffects-DEBUG: 20:15:15.491: pipe_manager.cpp:1039 new metadata property: 65, target.object, , (easyeffects:81448): easyeffects-DEBUG: 20:15:15.515: pipe_manager.cpp:1346 No node with id 65 in our node_map (easyeffects:81448): easyeffects-DEBUG: 20:15:15.515: pipe_manager.cpp:1346 No node with id 65 in our node_map 'spa_pod_is_array(pod)' failed at /nix/store/K0GW31V92ZN31HQMXQDY1H5H3VF4M6XC-pipewire-1.2.2-dev/include/spa-0.2/spa/pod/iter.h:325 spa_pod_get_array() (easyeffects:81448): easyeffects-DEBUG: 20:15:19.647: application_ui.cpp:262 disposed (easyeffects:81448): easyeffects-DEBUG: 20:15:19.647: app_info.cpp:377 Chromium disposed (easyeffects:81448): easyeffects-DEBUG: 20:15:19.647: app_info.cpp:385 Chromium finalized (easyeffects:81448): easyeffects-DEBUG: 20:15:19.647: app_info.cpp:63 data struct destroyed (easyeffects:81448): easyeffects-DEBUG: 20:15:19.647: app_info.cpp:377 LibreWolf disposed (easyeffects:81448): easyeffects-DEBUG: 20:15:19.648: app_info.cpp:385 LibreWolf finalized (easyeffects:81448): easyeffects-DEBUG: 20:15:19.648: app_info.cpp:63 data struct destroyed (easyeffects:81448): easyeffects-DEBUG: 20:15:19.648: app_info.cpp:377 LibreWolf disposed (easyeffects:81448): easyeffects-DEBUG: 20:15:19.648: app_info.cpp:385 LibreWolf finalized (easyeffects:81448): easyeffects-DEBUG: 20:15:19.648: app_info.cpp:63 data struct destroyed (easyeffects:81448): easyeffects-DEBUG: 20:15:19.649: equalizer_band_box.cpp:166 index: 0 disposed (easyeffects:81448): easyeffects-DEBUG: 20:15:19.650: equalizer_band_box.cpp:41 data struct destroyed (easyeffects:81448): easyeffects-DEBUG: 20:15:19.650: equalizer_band_box.cpp:176 finalized (easyeffects:81448): easyeffects-DEBUG: 20:15:19.650: equalizer_band_box.cpp:166 index: 1 disposed (easyeffects:81448): easyeffects-DEBUG: 20:15:19.652: equalizer_band_box.cpp:41 data struct destroyed (easyeffects:81448): easyeffects-DEBUG: 20:15:19.652: equalizer_band_box.cpp:176 finalized (easyeffects:81448): easyeffects-DEBUG: 20:15:19.652: equalizer_band_box.cpp:166 index: 2 disposed (easyeffects:81448): easyeffects-DEBUG: 20:15:19.653: equalizer_band_box.cpp:41 data struct destroyed (easyeffects:81448): easyeffects-DEBUG: 20:15:19.653: equalizer_band_box.cpp:176 finalized (easyeffects:81448): easyeffects-DEBUG: 20:15:19.654: equalizer_band_box.cpp:166 index: 3 disposed (easyeffects:81448): easyeffects-DEBUG: 20:15:19.655: equalizer_band_box.cpp:41 data struct destroyed (easyeffects:81448): easyeffects-DEBUG: 20:15:19.655: equalizer_band_box.cpp:176 finalized (easyeffects:81448): easyeffects-DEBUG: 20:15:19.655: equalizer_band_box.cpp:166 index: 4 disposed (easyeffects:81448): easyeffects-DEBUG: 20:15:19.656: equalizer_band_box.cpp:41 data struct destroyed (easyeffects:81448): easyeffects-DEBUG: 20:15:19.656: equalizer_band_box.cpp:176 finalized (easyeffects:81448): easyeffects-DEBUG: 20:15:19.657: equalizer_band_box.cpp:166 index: 5 disposed (easyeffects:81448): easyeffects-DEBUG: 20:15:19.658: equalizer_band_box.cpp:41 data struct destroyed (easyeffects:81448): easyeffects-DEBUG: 20:15:19.658: equalizer_band_box.cpp:176 finalized (easyeffects:81448): easyeffects-DEBUG: 20:15:19.658: equalizer_band_box.cpp:166 index: 6 disposed (easyeffects:81448): easyeffects-DEBUG: 20:15:19.659: equalizer_band_box.cpp:41 data struct destroyed (easyeffects:81448): easyeffects-DEBUG: 20:15:19.659: equalizer_band_box.cpp:176 finalized (easyeffects:81448): easyeffects-DEBUG: 20:15:19.660: equalizer_band_box.cpp:166 index: 7 disposed (easyeffects:81448): easyeffects-DEBUG: 20:15:19.663: equalizer_band_box.cpp:41 data struct destroyed (easyeffects:81448): easyeffects-DEBUG: 20:15:19.663: equalizer_band_box.cpp:176 finalized (easyeffects:81448): easyeffects-DEBUG: 20:15:19.663: app_info.cpp:377 disposed (easyeffects:81448): easyeffects-DEBUG: 20:15:19.664: app_info.cpp:385 finalized (easyeffects:81448): easyeffects-DEBUG: 20:15:19.664: app_info.cpp:63 data struct destroyed (easyeffects:81448): easyeffects-DEBUG: 20:15:19.664: app_info.cpp:377 disposed (easyeffects:81448): easyeffects-DEBUG: 20:15:19.664: app_info.cpp:385 finalized (easyeffects:81448): easyeffects-DEBUG: 20:15:19.664: app_info.cpp:63 data struct destroyed (easyeffects:81448): easyeffects-DEBUG: 20:15:19.664: app_info.cpp:377 disposed (easyeffects:81448): easyeffects-DEBUG: 20:15:19.664: app_info.cpp:385 finalized (easyeffects:81448): easyeffects-DEBUG: 20:15:19.664: app_info.cpp:63 data struct destroyed (easyeffects:81448): easyeffects-DEBUG: 20:15:19.664: app_info.cpp:377 disposed (easyeffects:81448): easyeffects-DEBUG: 20:15:19.664: app_info.cpp:385 finalized (easyeffects:81448): easyeffects-DEBUG: 20:15:19.664: app_info.cpp:63 data struct destroyed (easyeffects:81448): easyeffects-DEBUG: 20:15:19.664: app_info.cpp:377 disposed (easyeffects:81448): easyeffects-DEBUG: 20:15:19.664: app_info.cpp:385 finalized (easyeffects:81448): easyeffects-DEBUG: 20:15:19.664: app_info.cpp:63 data struct destroyed (easyeffects:81448): easyeffects-DEBUG: 20:15:19.664: app_info.cpp:377 disposed (easyeffects:81448): easyeffects-DEBUG: 20:15:19.665: app_info.cpp:385 finalized (easyeffects:81448): easyeffects-DEBUG: 20:15:19.665: app_info.cpp:63 data struct destroyed (easyeffects:81448): easyeffects-DEBUG: 20:15:19.665: app_info.cpp:377 disposed (easyeffects:81448): easyeffects-DEBUG: 20:15:19.665: app_info.cpp:385 finalized (easyeffects:81448): easyeffects-DEBUG: 20:15:19.665: app_info.cpp:63 data struct destroyed (easyeffects:81448): easyeffects-DEBUG: 20:15:19.665: app_info.cpp:377 disposed (easyeffects:81448): easyeffects-DEBUG: 20:15:19.665: app_info.cpp:385 finalized (easyeffects:81448): easyeffects-DEBUG: 20:15:19.665: app_info.cpp:63 data struct destroyed (easyeffects:81448): easyeffects-DEBUG: 20:15:19.667: presets_menu.cpp:693 disposed (easyeffects:81448): easyeffects-DEBUG: 20:15:19.668: presets_menu.cpp:46 data struct destroyed (easyeffects:81448): easyeffects-DEBUG: 20:15:19.668: presets_menu.cpp:703 finalized (easyeffects:81448): easyeffects-DEBUG: 20:15:19.668: effects_box.cpp:522 disposed (easyeffects:81448): easyeffects-DEBUG: 20:15:19.668: chart.cpp:47 data struct destroyed (easyeffects:81448): easyeffects-DEBUG: 20:15:19.668: chart.cpp:650 finalized (easyeffects:81448): easyeffects-DEBUG: 20:15:19.668: blocklist_menu.cpp:219 disposed (easyeffects:81448): easyeffects-DEBUG: 20:15:19.668: blocklist_menu.cpp:52 data struct destroyed (easyeffects:81448): easyeffects-DEBUG: 20:15:19.668: blocklist_menu.cpp:229 finalized (easyeffects:81448): easyeffects-DEBUG: 20:15:19.668: apps_box.cpp:414 disposed (easyeffects:81448): easyeffects-DEBUG: 20:15:19.668: node_info_holder.cpp:104 154, Chromium finalized (easyeffects:81448): easyeffects-DEBUG: 20:15:19.668: node_info_holder.cpp:104 171, LibreWolf finalized (easyeffects:81448): easyeffects-DEBUG: 20:15:19.668: node_info_holder.cpp:104 124, LibreWolf finalized (easyeffects:81448): easyeffects-DEBUG: 20:15:19.668: apps_box.cpp:51 data struct destroyed (easyeffects:81448): easyeffects-DEBUG: 20:15:19.668: apps_box.cpp:424 finalized (easyeffects:81448): easyeffects-DEBUG: 20:15:19.668: plugins_box.cpp:902 disposed (easyeffects:81448): easyeffects-DEBUG: 20:15:19.669: plugins_menu.cpp:301 disposed (easyeffects:81448): easyeffects-DEBUG: 20:15:19.669: plugins_menu.cpp:52 data struct destroyed (easyeffects:81448): easyeffects-DEBUG: 20:15:19.669: plugins_menu.cpp:311 finalized (easyeffects:81448): easyeffects-DEBUG: 20:15:19.669: plugins_box.cpp:113 data struct destroyed (easyeffects:81448): easyeffects-DEBUG: 20:15:19.669: plugins_box.cpp:912 finalized (easyeffects:81448): easyeffects-DEBUG: 20:15:19.669: effects_box.cpp:61 data struct destroyed (easyeffects:81448): easyeffects-DEBUG: 20:15:19.669: effects_box.cpp:532 finalized (easyeffects:81448): easyeffects-DEBUG: 20:15:19.669: effects_box.cpp:522 disposed (easyeffects:81448): easyeffects-DEBUG: 20:15:19.669: chart.cpp:47 data struct destroyed (easyeffects:81448): easyeffects-DEBUG: 20:15:19.669: chart.cpp:650 finalized (easyeffects:81448): easyeffects-DEBUG: 20:15:19.669: blocklist_menu.cpp:219 disposed (easyeffects:81448): easyeffects-DEBUG: 20:15:19.669: blocklist_menu.cpp:52 data struct destroyed (easyeffects:81448): easyeffects-DEBUG: 20:15:19.669: blocklist_menu.cpp:229 finalized (easyeffects:81448): easyeffects-DEBUG: 20:15:19.669: apps_box.cpp:414 disposed (easyeffects:81448): easyeffects-DEBUG: 20:15:19.669: node_info_holder.cpp:104 112, finalized (easyeffects:81448): easyeffects-DEBUG: 20:15:19.669: node_info_holder.cpp:104 114, finalized (easyeffects:81448): easyeffects-DEBUG: 20:15:19.669: node_info_holder.cpp:104 155, finalized (easyeffects:81448): easyeffects-DEBUG: 20:15:19.669: node_info_holder.cpp:104 152, finalized (easyeffects:81448): easyeffects-DEBUG: 20:15:19.669: node_info_holder.cpp:104 54, finalized (easyeffects:81448): easyeffects-DEBUG: 20:15:19.669: node_info_holder.cpp:104 133, finalized (easyeffects:81448): easyeffects-DEBUG: 20:15:19.669: node_info_holder.cpp:104 169, finalized (easyeffects:81448): easyeffects-DEBUG: 20:15:19.669: node_info_holder.cpp:104 201, finalized (easyeffects:81448): easyeffects-DEBUG: 20:15:19.670: apps_box.cpp:51 data struct destroyed (easyeffects:81448): easyeffects-DEBUG: 20:15:19.670: apps_box.cpp:424 finalized (easyeffects:81448): easyeffects-DEBUG: 20:15:19.670: plugins_box.cpp:902 disposed (easyeffects:81448): easyeffects-DEBUG: 20:15:19.670: plugins_menu.cpp:301 disposed (easyeffects:81448): easyeffects-DEBUG: 20:15:19.670: plugins_menu.cpp:52 data struct destroyed (easyeffects:81448): easyeffects-DEBUG: 20:15:19.670: plugins_menu.cpp:311 finalized (easyeffects:81448): easyeffects-DEBUG: 20:15:19.670: plugins_box.cpp:113 data struct destroyed (easyeffects:81448): easyeffects-DEBUG: 20:15:19.670: plugins_box.cpp:912 finalized (easyeffects:81448): easyeffects-DEBUG: 20:15:19.670: effects_box.cpp:61 data struct destroyed (easyeffects:81448): easyeffects-DEBUG: 20:15:19.670: effects_box.cpp:532 finalized (easyeffects:81448): easyeffects-DEBUG: 20:15:19.670: pipe_manager_box.cpp:836 disposed (easyeffects:81448): easyeffects-DEBUG: 20:15:19.672: node_info_holder.cpp:104 52, alsa_output.usb-FIIO_FIIO_KA11-01.analog-stereo finalized (easyeffects:81448): easyeffects-DEBUG: 20:15:19.672: pipe_manager_box.cpp:56 data struct destroyed (easyeffects:81448): easyeffects-DEBUG: 20:15:19.672: test_signals.cpp:215 destroyed (easyeffects:81448): easyeffects-DEBUG: 20:15:19.675: pipe_manager_box.cpp:846 finalized (easyeffects:81448): easyeffects-DEBUG: 20:15:19.675: application_ui.cpp:52 data struct destroyed (easyeffects:81448): easyeffects-DEBUG: 20:15:19.675: application_ui.cpp:272 finalized (easyeffects:81448): easyeffects-DEBUG: 20:15:19.675: presets_manager.cpp:233 destroyed (easyeffects:81448): easyeffects-DEBUG: 20:15:19.678: stream_input_effects.cpp:134 destroyed (easyeffects:81448): easyeffects-DEBUG: 20:15:19.678: effects_base.cpp:155 effects_base: destroyed (easyeffects:81448): easyeffects-DEBUG: 20:15:19.679: spectrum.cpp:79 sie: spectrum destroyed (easyeffects:81448): easyeffects-DEBUG: 20:15:19.680: output_level.cpp:41 sie: output_level destroyed (easyeffects:81448): easyeffects-DEBUG: 20:15:19.680: stream_output_effects.cpp:302 disconnecting the equalizer filter from PipeWire (easyeffects:81448): easyeffects-DEBUG: 20:15:19.682: pipe_manager.cpp:265 150 ee_soe_equalizer has been removed (easyeffects:81448): easyeffects-DEBUG: 20:15:19.684: stream_output_effects.cpp:134 destroyed (easyeffects:81448): easyeffects-DEBUG: 20:15:19.684: effects_base.cpp:155 effects_base: destroyed (easyeffects:81448): easyeffects-DEBUG: 20:15:19.685: spectrum.cpp:79 soe: spectrum destroyed (easyeffects:81448): easyeffects-DEBUG: 20:15:19.686: output_level.cpp:41 soe: output_level destroyed (easyeffects:81448): easyeffects-DEBUG: 20:15:19.686: pipe_manager.cpp:1693 Destroying PipeWire registry... (easyeffects:81448): easyeffects-DEBUG: 20:15:19.686: pipe_manager.cpp:1696 Disconnecting PipeWire core... (easyeffects:81448): easyeffects-DEBUG: 20:15:19.686: pipe_manager.cpp:265 Audio/Sink 52 alsa_output.usb-FIIO_FIIO_KA11-01.analog-stereo has been removed (easyeffects:81448): easyeffects-DEBUG: 20:15:19.686: pipe_manager.cpp:265 Stream/Output/Audio 154 Chromium has been removed (easyeffects:81448): easyeffects-DEBUG: 20:15:19.686: pipe_manager.cpp:265 Stream/Input/Audio 112 has been removed (easyeffects:81448): easyeffects-DEBUG: 20:15:19.686: pipe_manager.cpp:265 Stream/Input/Audio 114 has been removed (easyeffects:81448): easyeffects-DEBUG: 20:15:19.686: pipe_manager.cpp:265 Stream/Input/Audio 54 has been removed (easyeffects:81448): easyeffects-DEBUG: 20:15:19.686: pipe_manager.cpp:265 Stream/Input/Audio 152 has been removed (easyeffects:81448): easyeffects-DEBUG: 20:15:19.686: pipe_manager.cpp:265 Stream/Input/Audio 155 has been removed (easyeffects:81448): easyeffects-DEBUG: 20:15:19.686: pipe_manager.cpp:265 Stream/Input/Audio 201 has been removed (easyeffects:81448): easyeffects-DEBUG: 20:15:19.686: pipe_manager.cpp:265 Stream/Output/Audio 124 LibreWolf has been removed (easyeffects:81448): easyeffects-DEBUG: 20:15:19.687: pipe_manager.cpp:265 Stream/Input/Audio 133 has been removed (easyeffects:81448): easyeffects-DEBUG: 20:15:19.687: pipe_manager.cpp:265 Stream/Input/Audio 169 has been removed (easyeffects:81448): easyeffects-DEBUG: 20:15:19.687: pipe_manager.cpp:265 Stream/Output/Audio 171 LibreWolf has been removed (easyeffects:81448): easyeffects-DEBUG: 20:15:19.687: pipe_manager.cpp:265 Audio/Sink 64 easyeffects_sink has been removed (easyeffects:81448): easyeffects-DEBUG: 20:15:19.687: pipe_manager.cpp:265 Audio/Source/Virtual 172 easyeffects_source has been removed (easyeffects:81448): easyeffects-DEBUG: 20:15:19.687: pipe_manager.cpp:1701 Stopping PipeWire's loop... (easyeffects:81448): easyeffects-DEBUG: 20:15:19.687: pipe_manager.cpp:1704 Destroying PipeWire's context... (easyeffects:81448): easyeffects-DEBUG: 20:15:19.687: pipe_manager.cpp:1707 Destroying PipeWire's loop... (easyeffects:81448): easyeffects-DEBUG: 20:15:19.687: application.cpp:430 Shutting down... (easyeffects:81448): easyeffects-DEBUG: 20:15:19.687: equalizer_ui.cpp:1115 disposed (easyeffects:81448): easyeffects-DEBUG: 20:15:19.689: equalizer_ui.cpp:85 data struct destroyed (easyeffects:81448): easyeffects-DEBUG: 20:15:19.689: equalizer.cpp:119 soe: equalizer destroyed ```

Additional Information

I'm running easy effects with only one real speaker output, with the speaker output set as default in KDE, and easyeffects set to use default output device, as recommended.

violetmage commented 1 month ago

I think I see the issue.

https://github.com/wwmm/easyeffects/blob/3085129a1bf993e331098ae3a85dde59dc105159/src/pipe_manager.cpp#L350-L357

It looks to me like the if statement assumes that serial will always be SPA_ID_INVALID in the case that target_object is equal to pm->output_device.name or pm->ee_sink_node.name.

I think that maybe the call to util::str_to_num is somehow succeeding and changing the value of serial when it shouldn't (or is assumed not to). Then, when the string comparison shows as equal, the serial is checked, which shows as not equal, since util::str_to_num changed serial. Thus, ignore_output_stream is set and OP sees the error message. I could be wrong, but I haven't found any other possible holes in the logic at this point.

Perhaps modifying the test to be truthy instead of falsey would simplify it and remove this edge case, i.e.:

ignore_output_stream = true;
util::str_to_num(target_object, serial);

if (target_object == pm->output_device.name || target_object == pm->ee_sink_node.name) {
  ignore_output_stream = false;
} else if (serial != SPA_ID_INVALID &&
           (serial == pm->output_device.serial || serial == pm->ee_sink_node.serial)) {
  ignore_output_stream = false;
}
huantianad commented 1 month ago

Hmmm, you might be right, here is the source of str_to_num: https://github.com/wwmm/easyeffects/blob/3085129a1bf993e331098ae3a85dde59dc105159/include/util.hpp#L129-L176

I only skimmed it to see if it was possible for serial to be changed, didn't come to any conclusion. If this is the case, why is it only messing up here, and not with any other source? Do all the other sources happen to be using a serial for the target?

If this is the case, we could also just change serial != SPA_ID_INVALID to the result of util::str_to_num instead, since it returns if the conversion succeeded or not.

violetmage commented 1 month ago

The thing is that util::str_to_num does correctly leave the value of serial alone if it thinks that the input string is not a number.

The problem here appears to be that util::str_to_num incorrectly believes that the string alsa_output.usb-FIIO_FIIO_KA11-01.analog-stereo is a number, and so attempts to convert it. It doesn't know that its conversion is wrong because there's no reverse conversion test.

huantianad commented 1 month ago

Nevermind, I change my conclusion! I think that this could be a regression caused by https://github.com/wwmm/easyeffects/commit/c1b678a11846aa6eb9a3392a5332e8c1c5dab713, and resolved by https://github.com/wwmm/easyeffects/commit/53ac8f5a2700bfd5d0d8bc0ea500a17160fbfa1f... going to further test...

And quick test comes back promising! Building on master, which has the second commit, the issue is gone! Can you confirm if this seems right?

Goes to show I really need to be going to the tagged version's code when looking for these bugs... Still begs the question of why the other sources were still working though

violetmage commented 1 month ago

That makes more sense. pm->output_device.name must have been different from target_node, causing the test to succeed early due to the || instead of &&.

huantianad commented 1 month ago

I suppose, then, the other sources did work because the target object was serial, and the serial equality check logic was correct?

This issue I guess is resolved then, I'll keep it open so maintainer can see it, and perhaps add a note to changelog if wanted.

violetmage commented 1 month ago

Either that or the test for target_object != pm->ee_sink_node.name was not getting run because the || was skipping it when target_object != pm->output_device.name evaluated as true.

wwmm commented 1 month ago

It looks to me like the if statement assumes that serial will always be SPA_ID_INVALID in the case that target_object is equal to pm->output_device.name or pm->ee_sink_node.name.

No. It will first check if serial is not invalid. If it is the rest of the checks is ignored.

That makes more sense. pm->output_device.name must have been different from target_node, causing the test to succeed early due to the || instead of &&.

Yes. That is what I fixed with that patch. We do not want an or there.

I suppose, then, the other sources did work because the target object was serial, and the serial equality check logic was correct?

Most likely because they did not set a target_node. Most audio players do not set a custom device. The purpose of that code section in EasyEffects is to avoid messing with custom routing that should not go through EasyEffects. Like most loopback devices.

wwmm commented 1 month ago

This issue I guess is resolved then, I'll keep it open so maintainer can see it, and perhaps add a note to changelog if wanted.

Ok. We can close it.

huantianad commented 1 month ago

Actually, I think there is still a bit of an issue with the logic here. In the case that the target is a serial, it will result in the first branch of the if statement being executed, and thus skip the serial check. The order of the two checks should probably be switched, or like was previously suggested, we should invert the logic here to make it easier to understand too.

violetmage commented 1 month ago

I agree. At the very least, I think checking for equality is more readable than checking that everything is not equal.

Edit: I feel kind of silly for not noticing that before. @wwmm is there any reason in particular you structured it this way?

wwmm commented 1 month ago

The order of the two checks should probably be switched

This will just change the location of the problem. Now the other check that will be ignored. I think that the real fix is identifying if the target object is or not a number and then deciding what to do from that point on. Or just make eash if independent from each other instead of using an else if.

I agree. At the very least, I think checking for equality is more readable than checking that everything is not equal.

Edit: I feel kind of silly for not noticing that before. @wwmm is there any reason in particular you structured it this way?

I do not see how checking for equality is better. We only want to ignore the stream if it has set a target object and if this target is different from the device EasyEffects is using. If it sets a target object and this target is the device EE is using we must let the stream be moved as usual.

In 99 percent of the cases the target object is set by name. That is why I put the name check first. But indeed as it is the else if will be ignored.

wwmm commented 1 month ago

I've updated our master branch with the else if replaced by an independent if. It should be fine. Any of those conditions being true means we should ignore the stream.

huantianad commented 1 month ago

I don't think that works haha, we want to ignore the source if neither conditions are true, not if either are true.

wwmm commented 1 month ago

I don't think that works haha, we want to ignore the source if neither conditions are true, not if either are true.

Hum... Yes, it is still problematic :smile: . I really think PipeWire should not have used the same tag for names and serial numbers. This is annoying...

But now I remember that util::str_to_num returns a bool that tells if the conversion to number failed or not. IF we check names only if the conversion to a number failed it should be enough.

huantianad commented 1 month ago

The code at the bottom of this comment also works: https://github.com/wwmm/easyeffects/issues/3358#issuecomment-2327882672

Alternatively, you could do something like this

uint64_t serial = SPA_ID_INVALID;
bool target_is_serial = util::str_to_num(target_object, serial);

bool different_name = target_object != pm->output_device.name && target_object != pm->ee_sink_node.name;
bool different_serial = serial != pm->output_device.serial && serial != pm->ee_sink_node.serial;
bool ignore_output_stream = target_is_serial ? different_serial : different_name;

which can also be combined into one statement.

For any fix though, it might be good to use the return value from str_to_num anyway, instead of checking if serial != SPA_ID_INVALID.

wwmm commented 1 month ago

The code at the bottom of this comment also works: #3358 (comment)

Alternatively, you could do something like this

uint64_t serial = SPA_ID_INVALID;
bool target_is_serial = util::str_to_num(target_object, serial);

bool different_name = target_object != pm->output_device.name && target_object != pm->ee_sink_node.name;
bool different_serial = serial != pm->output_device.serial && serial != pm->ee_sink_node.serial;
bool ignore_output_stream = different_name && (!target_is_serial || different_serial);

which can also be combined into one statement.

For any fix though, it might be good to use the return value from str_to_num anyway, instead of checking if serial != SPA_ID_INVALID.

I've updated the master branch with something similar to that.

huantianad commented 1 month ago

Awesome, thanks for bearing with this! Seems good :+1:

wwmm commented 1 month ago

Awesome, thanks for bearing with this! Seems good 👍

No problems :-). So far I haven't seen a single case where target_object has been given as a serial number. But it does not hurt to make this case work.

Slayer5934 commented 1 month ago

If anyone is searching for a temp fix just use Helvum or something to manually route the audio.