Skip to content

audio: add easyeffects profiles support#2915

Open
Ape wants to merge 1 commit into
noctalia-dev:mainfrom
Ape:pr/easyeffects
Open

audio: add easyeffects profiles support#2915
Ape wants to merge 1 commit into
noctalia-dev:mainfrom
Ape:pr/easyeffects

Conversation

@Ape

@Ape Ape commented Jun 6, 2026

Copy link
Copy Markdown
Contributor

This commit adds support for switching between easyeffects profiles (output and input audio) if available.

Type of Change

  • New feature

Testing

  • Tested on Hyprland

Screenshots

image image

Checklist

  • Code follows project style guidelines
  • Self-reviewed my code
  • No new warnings or errors

@LucasOe

LucasOe commented Jun 6, 2026

Copy link
Copy Markdown
Contributor

While on the topic, personally I think it would be also nice if the Easy Effects Sink could be hidden from the selectable output devices.

@Ly-sec

Ly-sec commented Jun 7, 2026

Copy link
Copy Markdown
Member

Nice feature, and the EasyEffects side discovery looks well thought out (XDG paths, Flatpak, easyeffectsrc, the runtime socket). I'd use this. Just wouldn't merge it as-is, mostly where the code lives and how often it runs.

What works

The Control Center rows make sense: show output/input presets when EasyEffects is actually there, hide them otherwise. IPC + OSD for effects-profile-set fits how we already expose audio stuff. Showing the active profile in the volume widget tooltip is a good bonus.

What I'd change

Pull it out of PipeWireService. EasyEffects isn't PipeWire, this is ~500 lines of socket I/O, INI parsing, and directory walks bolted onto a file that's already huge. A small dedicated service (whatever we want to call it) wired from Application, with AudioTab and IPC calling into it, would be much easier to live with.

Stop scanning the filesystem every frame. syncEffectsProfileControls() calls effectsProfiles() on every doUpdate, which stats the socket, walks config/data dirs, and may parse easyeffectsrc. No cache. That's a lot of I/O just because Control Center is open.

Ironically the active profile goes the other way - it's cached and only refreshed when the tab is created or you switch from Noctalia. So the list is hammered constantly but the selection can be wrong if you changed presets in EasyEffects itself.

Socket I/O on the UI thread is probably fine for a click (loadEffectsProfile has that ~250ms poll), but discovery shouldn't be on a hot path.

Smaller nits:

  • "EasyEffects" is hardcoded in the volume tooltip, needs i18n
  • the dismissTransientUi() flip is unrelated, would drop it from this PR

LucasOe's point about hiding the EasyEffects virtual sink from the device picker is fair, doesn't need to block this, but it's a natural follow-up.

Before merge

  1. Extract out of pipewire_service.cpp
  2. Cache profile discovery, refresh on tab open, after a successful load, maybe a lazy timer. Not every frame.
  3. Actually refresh the active profile when it might've changed externally
  4. i18n + IPC docs
  5. Fix merge conflicts

Feature: yes. As written: needs another pass.

@ItsLemmy ItsLemmy deleted the branch noctalia-dev:main June 8, 2026 13:53
@ItsLemmy ItsLemmy closed this Jun 8, 2026
@Ape

Ape commented Jun 8, 2026

Copy link
Copy Markdown
Contributor Author

@ItsLemmy Can you reopen this so that I can change the base branch to main?

@ItsLemmy ItsLemmy reopened this Jun 9, 2026
@ItsLemmy

ItsLemmy commented Jun 9, 2026

Copy link
Copy Markdown
Collaborator

I had to recreate a v5 branch, so please do it quick if you can

@Ape Ape changed the base branch from v5 to main June 9, 2026 17:42
@Ape

Ape commented Jun 9, 2026

Copy link
Copy Markdown
Contributor Author

I had to recreate a v5 branch, so please do it quick if you can

Base branch changed! However, I won't have time to finish this PR at least for a couple of days now.

@Ly-sec

Ly-sec commented Jun 11, 2026

Copy link
Copy Markdown
Member

I had to recreate a v5 branch, so please do it quick if you can

Base branch changed! However, I won't have time to finish this PR at least for a couple of days now.

I'll mark is as a draft for now then :).

@Ly-sec Ly-sec marked this pull request as draft June 11, 2026 12:29
@Ape Ape force-pushed the pr/easyeffects branch from 37b0dd0 to f668c91 Compare June 12, 2026 20:06
@Ape Ape force-pushed the pr/easyeffects branch from f668c91 to ef03e2a Compare June 12, 2026 20:40
@Ape Ape marked this pull request as ready for review June 12, 2026 20:40
@Ape

Ape commented Jun 12, 2026

Copy link
Copy Markdown
Contributor Author

@Ly-sec, new version ready for review.

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

Successfully merging this pull request may close these issues.

4 participants