v0.2.0: deep-dive voicing pass, M2 preset system, DE localisation, app icon#19
Merged
Merged
Conversation
…n, app icon Distance's low-shelf taper now uses a front-loaded "ease-out" curve instead of plain-linear-in-dB, matching real proximity effect's documented "accelerates then saturates" behaviour (see docs/design-brief.md). Manual/ architecture docs replace the "air-absorption" framing with a directivity-first explanation, and LoCut/HiCut's wider-than-NadIR ranges are now documented as a deliberate keep with a named regression test. Implements the suite-wide M2 preset system (.scaffold/specs/preset-system-m2.md) for the first time, with Nave as the pilot: src/presets/PresetManager (factory presets embedded via BinaryData, user presets on disk, dirty tracking, prev/next, single-file and zip-bank import/export, user-wins-over-factory default resolution) and src/presets/PresetBar (the editor strip). Ships with 8 factory presets and a German frame-string localisation (resources/i18n/de.txt, selected via SystemStats::getUserLanguage()). docs/preset-system-notes.md documents the replication recipe for the other 11 plugins. The app icon is now wired into the built AU/VST3/Standalone via ICON_BIG. 73 Catch2 tests green (up from 50): new Distance-taper shape/regression tests, a LoCut/HiCut range guard, and 16 preset-system tests covering round-trip, forward-tolerant import, wrong-plugin/format refusal, factory integrity, default resolution, dirty-flag lifecycle, prev/next wrap-around, and bank import/export. Co-Authored-By: Claude Fable 5 <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.
Summary
This is the v0.2.0 release wave: a research-derived voicing revision, the suite's first implementation of the M2 preset system (Nave as pilot), a German frame-string localisation, and the app icon wired into the built binaries.
Deep-dive voicing pass (
docs/design-brief.md,docs/research-notes.md)1 - (1 - normalisedDistance)^1.8), matching the documented "accelerates then saturates" shape of real proximity effect. The high-shelf deliberately keeps its linear taper (seedocs/architecture.md's "v0.2.0 Distance taper" note for why that asymmetry is intentional, not an oversight). This is a parameter-behavior-breaking change pre-1.0 — same Distance range/default, different curve; no state migration needed (seeCHANGELOG.md).Convolution::Normalise::yesis an energy normalisation, not a perceptual loudness match, and points at Level as the fix.M2 preset system (
.scaffold/specs/preset-system-m2.md, binding suite-wide spec)src/presets/PresetManager— factory presets (embedded via BinaryData), user presets (disk), load/save/rename/delete, dirty-state tracking, prev/next navigation, single-file and zip-bank import/export, user-preset-wins-over-factory default resolution.src/presets/PresetBar— the editor strip ([<] [Name*] [>] [Save] [Save As...] [Delete] [Import...] [Export...]), docked at the top of the existing v0.1/v0.2 layout.presets/factory/*.json, documented one-line-each indocs/presets.md).resources/i18n/de.txt) for PresetBar's frame strings only — parameter/DSP terminology is never translated.PresetManagerConfig/FactoryPresetAssetsurface —docs/preset-system-notes.mdis the replication recipe for the other 11 plugins.App icon
ICON_BIG "docs/assets/icon.png"added tojuce_add_plugin(...)— verified embedded in the built AU/VST3/Standalone locally (AppIcon.icnspresent in each bundle'sContents/Resources/).Fix-wave commits folded in
Commits merged after the v0.1.0 tag that never got their own release are now honestly summarised in
CHANGELOG.md's[0.2.0]section: PR #18's audio-thread-safety/robustness fixes (#12, #13), a signed-release CI workflow (#10), and branding/copy housekeeping (#9, #14, #15, #17).Test plan
cmake -B build -G Ninja -DCMAKE_BUILD_TYPE=Debug(JUCE 8.0.14 + Catch2 v3.15.2 via CPM,CPM_SOURCE_CACHEshared cache)cmake --build build --target Tests Nave_Standalone --parallel 4— clean build, no warningsctest --test-dir build --output-on-failure— 73/73 tests green (up from 50: +2 from the already-merged PR fix: resolve review findings (audio-thread safety, robustness) #18, +3 Distance-taper/range-guard tests, +16 preset-system tests,+2net from other coverage additions)cmake --build build --target Nave_VST3 Nave_AU— both formats build and embed the app icon locallytests/PresetManagerTests.cppnever touches the real~/Library/Audio/Presets/...directory on the dev machine (test-only directory override + post-test confirmation the real path was never created)🤖 Generated with Claude Code