Skip to content
This repository was archived by the owner on Aug 2, 2026. It is now read-only.

feat: GUITAR mode — octave-down front end + red theme - #25

Closed
jameshgordy wants to merge 3 commits into
chore/wording-cleanupfrom
feat/guitar-mode
Closed

jameshgordy wants to merge 3 commits into
chore/wording-cleanupfrom
feat/guitar-mode

Conversation

@jameshgordy

Copy link
Copy Markdown
Contributor

A GUITAR key on the bottom bar pitches the input down one octave ahead of the entire chain (play a guitar, get a bass) and recolors the whole editor red. Stacked on #24.

  • Granular shifter restored from history and generalized to ratio 0.5: reversed tap sweep (causal — no lookahead), correlation splice kept, pre-LPF dropped for down, 2-sample delay floor guards block-edge interpolation.
  • Latency (1538 smp @ 48 kHz) reported only while engaged (listener → AsyncUpdater → setLatencySamples); zero-latency otherwise.
  • Routing: shifted signal feeds the DI strip/analyzer/stack; A/B auditions the true raw input. 10 ms engage crossfade.
  • guitar_mode APVTS bool, stateVersion 3→4 (default off = byte-identical), excluded from factory reset and user-preset save/load.
  • Theme is per-editor-instance (no mutable globals): accent members on the LnFs/strips/analyzer/info panel, logo recolor via Drawable::replaceColour, one repaint per toggle.
  • New bor-bench fnv config records the GUITAR fingerprint.

Verified: 7 existing fingerprints byte-identical, cal deltas ≤ 0.03 dB, GUITAR fingerprint deterministic, auval -v aufx BbEn BxRl PASS.

🤖 Generated with Claude Code

Play a guitar, get a bass: a GUITAR key on the bottom bar pitches the
input down an octave ahead of the whole chain and recolors the editor
red (per-instance theme — other open editors stay cyan).

DSP: the granular shifter returns, generalized to a prepare-time ratio.
Octave-down sweeps the taps the other way (0 -> grain, causal, no
lookahead), keeps the correlation splice, drops the pre-LPF (down-shift
cannot alias), and floors the tap delay at 2 samples so interpolation
never reads past the write head. Latency (mean grain/2 + snap/2 + DMIN
= 1538 smp @ 48 kHz) is reported only while engaged, via the restored
listener/AsyncUpdater machinery — zero-latency with the mode off.

The shifted signal becomes the plugin's "DI" (DI blend strip, analyzer,
stack feed); the A/B key still auditions the true un-shifted input.
Engage/disengage crossfades over 10 ms (same law as A/B). guitar_mode is
an APVTS bool (stateVersion 4, default off = v3 byte-identical) and is
excluded from the preset surface: factory reset skips it, user presets
neither save nor apply it — presets are tones, this is what's plugged in.

Verified: all 7 existing bor-bench fnv fingerprints byte-identical, cal
deltas unchanged (<= 0.03 dB), new GUITAR fingerprint recorded and
deterministic across runs (1c7847705b1de387), auval -v aufx BbEn BxRl
PASS (incl. 11025/22050 Hz and state round-trip).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@jameshgordy jameshgordy mentioned this pull request Jul 27, 2026
jameshgordy and others added 2 commits July 27, 2026 20:35
The Standalone hides the GUITAR key and force-bypasses the mode
(wrapperType gate), whatever a loaded session says: AU/VST3/AAX only.
bor-bench instantiates as wrapperType_Undefined, so the GUITAR
fingerprint config still exercises the shifter — verified unchanged
(1c7847705b1de387), auval PASS.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
James, in Logic: the mode key belongs at the top. The bottom bar returns
to FREQ + analyzer only; the update link chains off the GUITAR key when
present (plugin formats), off SYS in the Standalone as before.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@jameshgordy
jameshgordy deleted the branch chore/wording-cleanup July 27, 2026 20:28
@jameshgordy
jameshgordy deleted the feat/guitar-mode branch August 2, 2026 11:10
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant