Skip to content

feat: v0.2.0 deep-dive rework, M2 preset system, i18n frame, housekeeping#7

Merged
yves-vogl merged 1 commit into
mainfrom
feat/v0.2.0-deep-dive-and-presets
Jul 16, 2026
Merged

feat: v0.2.0 deep-dive rework, M2 preset system, i18n frame, housekeeping#7
yves-vogl merged 1 commit into
mainfrom
feat/v0.2.0-deep-dive-and-presets

Conversation

@yves-vogl

Copy link
Copy Markdown
Contributor

Summary

Deep-dive voicing rework (docs/design-brief.md, sourced in docs/research-notes.md) against the F6-class reference set (Waves F6, FabFilter Pro-Q 3/4, TDR Nova, Sonnox Oxford Dynamic EQ):

  • Knee width now derives from Range (clamp(|rangeDb| * 0.5, 2, 10) dB), replacing v0.1.0's flat 6 dB constant. Reproduces the old fixed-6-dB knee shape exactly at Range = ±12 dB (deliberate, tested bit-compatible-in-shape special case).
  • New per-band bN_autoRelease (off by default): program-dependent release. Detector gains a dedicated fast reference envelope (fixed fast release, independent of the user's own Release setting) whose recent dB fall rate derives an effective release that is always <= the manual Release value and shortens automatically when the signal is genuinely decaying on its own. Inspired by, not a reproduction of, Waves F6's proprietary ARC (documented in the brief's honesty section). An earlier implementation attempt derived the fall-rate measurement from the slow main envelope itself, which is self-referential and never actually sped anything up — see docs/architecture.md's new "program-dependent auto-release" section for the full writeup of that mistake and the fix.
  • New per-band bN_gainQ (off by default): the main filter's own Q widens as the band's dynamic gain approaches Range (Sonnox-style analog softening), scoped away from the Detector's own sidechain selectivity to avoid a feedback loop.
  • Attack range widened to 0.1–500 ms (was 0.5–100 ms); Release range widened to 5–1500 ms (was 10–1000 ms).
  • Both new toggles default off; tolerant import verified (a v0.1.0 session loads with every existing value preserved exactly and the new IDs at their off default).

M2 preset system (src/presets/, copied verbatim from the basilica-audio/nave pilot per its replication recipe): PresetManager/PresetBar/Localisation, nine factory presets (docs/presets.md), German frame localisation (resources/i18n/de.txt — core DSP terminology never translated).

Housekeeping: app icon wired via ICON_BIG (this repo never got a patch release with it); .github/workflows/release.yml gets the suite-wide idempotent create-release job fix (this repo never got the earlier ci-fix PR); version bumped to 0.2.0.

No GUI changes for bN_autoRelease/bN_gainQ — deliberately deferred to M3 alongside the rest of the custom LookAndFeel pass, per the design brief's own scope note. Both remain fully automation/preset-controllable.

Test plan

  • ctest — 87/87 green locally (Debug, Ninja, arm64 native): all 47 pre-existing v0.1.0 tests still pass unmodified in behavior (only range-boundary/count assertions updated to match the widened parameter layout), plus new coverage for every design-brief guarantee (feat: M1 dynamic EQ core, tests and docs #1feat: v0.2.0 deep-dive rework, M2 preset system, i18n frame, housekeeping #7), the full M2 preset-system suite (16 cases, adapted from nave), i18n frame coverage, and a new permanent AllocationGuard/AllocationTests.cpp audio-thread allocation regression harness (extended to the auto-release and gain/Q-coupling code paths specifically).
  • Lancet_Standalone builds clean (Debug, Ninja, arm64 native).
  • CI (macOS + Windows matrix, pluginval strictness 10, auval) — will confirm green before merge.

🤖 Generated with Claude Code

Deep-dive voicing rework (docs/design-brief.md, sourced in
docs/research-notes.md) against the F6-class reference set (Waves F6,
FabFilter Pro-Q 3/4, TDR Nova, Sonnox Oxford Dynamic EQ):

- Knee width now derives from Range (clamp(|rangeDb|*0.5, 2, 10) dB),
  replacing the v0.1.0 flat 6 dB constant.
- New per-band bN_autoRelease: program-dependent release derived from a
  dedicated fast reference envelope inside Detector, independent of the
  user's own Release setting, always <= the manual value.
- New per-band bN_gainQ: main-filter Q widens with dynamic gain (Sonnox-
  style analog softening), scoped away from the Detector's own sidechain
  selectivity to avoid a feedback loop.
- Attack widened to 0.1-500 ms, Release widened to 5-1500 ms.
- Both new toggles default off and are tolerant-import safe: a v0.1.0
  session loads with every existing value preserved exactly and the new
  IDs at their off default.

M2 preset system (src/presets/, copied from the basilica-audio/nave
pilot per its replication recipe): PresetManager/PresetBar/Localisation,
nine factory presets (docs/presets.md), German frame localisation
(resources/i18n/de.txt).

Housekeeping: app icon wired via ICON_BIG, release.yml gets the
suite-wide idempotent create-release job fix this repo never received,
version bumped to 0.2.0.

Catch2 suite grown from 47 to 87 cases, including a new permanent
audio-thread AllocationGuard/AllocationTests.cpp regression harness.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@yves-vogl
yves-vogl merged commit 117627f into main Jul 16, 2026
2 checks passed
@yves-vogl
yves-vogl deleted the feat/v0.2.0-deep-dive-and-presets branch July 16, 2026 21:42
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