Skip to content

Add Pre/Off/Post EQ placement (closes #478)#637

Open
silvansky wants to merge 1 commit into
sdatkinson:mainfrom
silvansky:feature/eq-pre-post
Open

Add Pre/Off/Post EQ placement (closes #478)#637
silvansky wants to merge 1 commit into
sdatkinson:mainfrom
silvansky:feature/eq-pre-post

Conversation

@silvansky

@silvansky silvansky commented Jun 4, 2026

Copy link
Copy Markdown

Closes #478.

Adds a Pre / Off / Post control for the tone stack (EQ), so the EQ can run before the NAM model, after it, or be bypassed. The blocker noted in #478 (#459 — legacy unserializer) has since been resolved, and this PR routes the new parameter through that existing migration framework so old projects keep loading correctly.

Screenshot 2026-06-04 at 20 48 07

What changed

  • Param: merged the old kEQActive bool into a single 3-state enum kEQMode {"Pre","Off","Post"} (default Post, i.e. the current behavior). Enum EEQMode { kEQModePre, kEQModeOff, kEQModePost }.
  • DSP (ProcessBlock): in Pre mode the tone stack processes the signal feeding the model (gate detection stays on the raw input); in Post mode it runs after the model as before; Off bypasses it. The tone stack is invoked exactly once (Pre XOR Post) and writes to its own buffer (no input/output aliasing).
  • UI: replaced the EQ slide switch with an IVTabSwitchControl (Pre/Off/Post) plus a label, in the same spot. EQ knobs grey out in Off.
  • Backward compatibility (Unserialization.cpp, version 0.7.150.7.16): new _GetConfigFrom_0_7_16 reader (param renamed ToneStackEQ), and a migration in _UpdateConfigFrom_0_7_14 mapping the legacy bool (on → Post, off → Off). Because the older readers chain through _UpdateConfigFrom_0_7_14, presets from all prior versions migrate correctly; new presets round-trip via the 0.7.16 reader.

Legacy presets can only map to Post (pre-model EQ didn't exist before) — intended.

Notes

  • The 5 *-Info.plist changes are auto-generated from the config.h version bump. Happy to renumber if you'd prefer a different version slot.
  • I did not run format.bash: my local clang-format (v22) reformats unrelated pre-existing code (collapsing short brace-bodies per the repo's .clang-format), which would add churn. The added lines follow the surrounding style — let me know if you'd like me to apply your clang-format version.

Testing (per CONTRIBUTING)

  • The standalone plugin builds.
  • The plugin runs.
    • The plugin makes sound.
    • You can load a new-style (file) model.
    • You can load an old-style (directory) model.
    • You can load a supported IR.
    • The EQ section works (Pre/Off/Post switch + knobs; Pre vs Post audibly changes tone, Off bypasses).
  • The VST3 plugin builds.
    • The plugin passes validation. Ran pluginval 1.0.4 @ strictness 8 (the tool this repo's CI uses) against the VST3 (v0.7.16) → SUCCESS, 0 failures. Covers Plugin state + Plugin state restoration (exercises the new serialization/migration), Audio processing and Non-releasing audio processing across 44.1/48/96 kHz × block sizes 64–1024, Automation, Parameters, Parameter thread safety, and Fuzz parameters.
  • The AU plugin builds.

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.

[FEATURE] Pre & Post EQ toggle/switch

1 participant