Skip to content

Add profile-based speaker equalization - #249

Closed
Sean-StarLabs wants to merge 2 commits into
elementary:mainfrom
StarLabsLtd:speaker-eq
Closed

Sean-StarLabs wants to merge 2 commits into
elementary:mainfrom
StarLabsLtd:speaker-eq

Conversation

@Sean-StarLabs

@Sean-StarLabs Sean-StarLabs commented Oct 3, 2026 •

Copy link
Copy Markdown

Add speaker equalization for physical outputs with a root-installed device profile and matching PipeWire graph. The existing audio service applies five bounded gains and fixed profile headroom, confirms native readback, and reports status to Sound. Off/Flat restores unity without changing physical volume or mute.

This requires a vendor/distribution profile and graph/route provider; no hardware profiles are included. Adds libWirePlumber >= 0.5 and build-generated Vala bindings. The physical graph requires PipeWire 1.4 features; runtime checks used PipeWire 1.6.2/libWirePlumber 0.5.13.

Depends on #248 (this draft includes its base commit). Companion Sound draft: elementary/settings-sound#311. EQ-only changes start after 59c80f5.

Test: 34 combined native/GTK/AEC checks under ASan, 10 secure-loader checks, 9 GTK regression checks, 17 pure-Pulse functional checks, and cached-metadata rejection. Includes foreign-control preservation, idle/reconnect/cancellation, route bypass, and Off/Flat unity. Hardware acoustics and production provider routing remain untested.

Keep the saved preference and native PulseAudio module lifecycle in the
existing session daemon. Expose read-only status for Sound controls.

Test=Paired native fixtures on isolated PulseAudio 17 and PipeWire 1.6.2:
16 functional and 5 fault groups per server, using synthetic ALSA devices.
Includes owner startup and audio-server restart with Settings closed.
No desktop login, real hardware or acoustic testing.
Apply bounded five-band speaker profiles through the audio service using
libWirePlumber. Off and Flat restore unity gain; only outputs with a
root-installed profile and matching physical graph are supported.

Test: native parameter write/sync/readback, foreign-control and lifecycle
checks under ASan; real GTK controls with AEC; pure-Pulse AEC regression.
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.

1 participant