Skip to content

refactor(eq): consume the shared spatcore EQ - #3

Merged
pob31 merged 2 commits into
mainfrom
feat/shared-eq
Aug 1, 2026
Merged

refactor(eq): consume the shared spatcore EQ#3
pob31 merged 2 commits into
mainfrom
feat/shared-eq

Conversation

@pob31

@pob31 pob31 commented Aug 1, 2026

Copy link
Copy Markdown
Owner

Retires XOA's EQ copies now that spatcore owns them. Merge spatcore#4 first — this PR pins d7967f7.

Net -1092 lines. XOA migrates directly to the qualified spatcore::ui names — no compat shims, unlike WFS-DIY, which still carries pre-extraction call sites.

DSP

SpeakerCompProcessor's hand-rolled EqBank + eqEnabled vectors become one spatcore::dsp::MultiChannelEQBank<kNumEqBands>. The fused delay → EQ → gain loop, delay lines, smoothers, gain ramps and samplePos bookkeeping are untouched — only the EQ step changes. The local disabled -> shape 0 line is dropped because the bank enforces that itself, which is the contract the shared unit tests pin.

GUI

Source/GUI/EQDisplayComponent.h (1018 lines) and Source/GUI/Widgets/EQBandToggle.h are deleted in favour of the spatcore ui/ layer. The new Source/GUI/EqDisplayStyle.h is the app seam: speaker-EQ parameter ids and ranges, plus the palette and localisation providers the widgets invoke at paint time (never cached, so live theme and language switching keep working).

EqTab sets display->ownerPersistsValue = true. XOA's old component always delegated writes to onParameterChanged, while the shared one defaults to writing the tree itself (the WFS-DIY reverb behaviour) — without this XOA would double-write and bypass the store's scoped-undo / band seam.

XOA's curves are unchanged. Its response math was already the correct reference — it mirrored the spatcore filter formula-for-formula, honouring the separate shelf slope — which is why it became the merged component's base, with WFS-DIY's UndoManager support and dual write model folded in around it. (WFS-DIY's curves do change; that's a fix on its side.)

Verification

  • full xoa-tests suite green, with no test source modifiedXoaCompTests (EQ neutrality + readout) and XoaParameterTests are the gate proving the bank swap changed nothing
  • app + tests build clean (Release, VS2026)
  • no stale references to the deleted headers anywhere in Source/

Manual pass worth doing before merge: the EQ tab's drag / wheel / keyboard interaction, that edits still round-trip through the store seam, and toggle colours across themes.

🤖 Generated with Claude Code

pob31 and others added 2 commits August 1, 2026 23:27
Retires XOA's copies now that spatcore owns the EQ (spatcore PR #4).
Net: -1092 lines. XOA migrates DIRECTLY to the qualified spatcore::ui names
— no compat shims, unlike WFS-DIY, which still carries pre-extraction call
sites.

SpeakerCompProcessor — the hand-rolled EqBank + eqEnabled vectors become one
spatcore::dsp::MultiChannelEQBank<kNumEqBands>. The fused delay -> EQ -> gain
loop, the delay lines, smoothers, gain ramps and samplePos bookkeeping are
untouched; only the EQ step changes. The local "disabled -> shape 0" line is
dropped because the bank enforces that itself, which is the contract the
shared unit tests pin. Neutrality is unchanged (XoaCompTests passes as-is).

GUI — Source/GUI/EQDisplayComponent.h (1018 lines) and
Source/GUI/Widgets/EQBandToggle.h are deleted in favour of the spatcore ui
layer. The new Source/GUI/EqDisplayStyle.h is the app seam: it supplies the
speaker-EQ parameter ids and ranges, and the palette/localisation providers
the widgets call AT PAINT TIME (never cached, so live theme and language
switching keep working). spatcore names no app symbol; XOA supplies all of it
from here.

EqTab sets display->ownerPersistsValue = true. XOA's old component always
delegated writes to onParameterChanged, while the shared one defaults to
writing the tree itself (the WFS-DIY reverb behaviour) — without this XOA
would double-write and bypass the store's scoped-undo / band seam.

XOA's response math was already the correct reference (it mirrored the
spatcore filter formula-for-formula, honouring the separate shelf slope), so
its curves are unchanged. It is the merged component's base; WFS-DIY's
UndoManager support and dual write model were folded in around it.

CMakeLists.txt links the new spatcore-ui target.

Verification: full xoa-tests suite green with NO test source modified —
XoaCompTests (EQ neutrality + readout) and XoaParameterTests are the gate
proving the bank swap changed nothing.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
spatcore PR #4 landed as merge commit 8296f28. Repoint the submodule from the
feature-branch commit to main's tip so `git -C spatcore checkout main` leaves
the pointer clean. Identical tree — the merge introduced no changes.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@pob31
pob31 merged commit 9c2de0f into main Aug 1, 2026
3 checks passed
@pob31
pob31 deleted the feat/shared-eq branch August 2, 2026 21:10
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