refactor(eq): consume the shared spatcore EQ - #3
Merged
Merged
Conversation
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>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
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::uinames — no compat shims, unlike WFS-DIY, which still carries pre-extraction call sites.DSP
SpeakerCompProcessor's hand-rolledEqBank+eqEnabledvectors become onespatcore::dsp::MultiChannelEQBank<kNumEqBands>. The fused delay → EQ → gain loop, delay lines, smoothers, gain ramps andsamplePosbookkeeping are untouched — only the EQ step changes. The localdisabled -> shape 0line is dropped because the bank enforces that itself, which is the contract the shared unit tests pin.GUI
Source/GUI/EQDisplayComponent.h(1018 lines) andSource/GUI/Widgets/EQBandToggle.hare deleted in favour of the spatcoreui/layer. The newSource/GUI/EqDisplayStyle.his 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).EqTabsetsdisplay->ownerPersistsValue = true. XOA's old component always delegated writes toonParameterChanged, 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
UndoManagersupport and dual write model folded in around it. (WFS-DIY's curves do change; that's a fix on its side.)Verification
xoa-testssuite green, with no test source modified —XoaCompTests(EQ neutrality + readout) andXoaParameterTestsare the gate proving the bank swap changed nothingSource/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