Blocked by ADR-0024 and ADR-0025 — #45. Also gated on ADR-0020 (the cross-deck interface-state store, currently Proposed and unbuilt). Depends on #46 (note path) and #47 (beat-to-Rust migration).
Problem
Mismatched keys clash. We have beat detection but no key detection (confirmed: none in the codebase). With MIDI steering (#46) and key detection in the Rust shell (ADR-0024), we can detect the playing deck's key and steer the generative deck to a compatible key automatically — generative harmonic mixing, beyond what a normal DJ setup can do.
Proposed approach (per ADR-0024 / ADR-0025)
Build chroma + key-profile detection behind an honesty gate (ADR-0024); publish the gated key as cross-deck state (ADR-0020's store, or the interim analysis::State bridge); map it to a scale/chord-tone multihot and send it over #46's note path, quantised to the playing deck's beat grid (fed from #47's Rust gate, ADR-0014) so harmony shifts on a bar, not mid-phrase.
Acceptance criteria
- A deck's key/chord is estimated from its audio with a confidence gate; low confidence → no steering (honesty).
- When enabled, the generative deck audibly tracks the playing deck's key; per-deck toggle.
- Key changes land on a bar (beat-grid quantised), not mid-phrase.
- Tests cover detection on known-key fixtures and the gate; a key corpus is established (ADR-0024).
Scope & non-goals
In scope: automatic key matching. Non-goals: manual play (the pad/keyboard steering issue); full chord-progression sequencing. Blocked by ADR-0024 + ADR-0025 (#45) and ADR-0020; depends on #46 and #47.
Blocked by ADR-0024 and ADR-0025 — #45. Also gated on ADR-0020 (the cross-deck interface-state store, currently Proposed and unbuilt). Depends on #46 (note path) and #47 (beat-to-Rust migration).
Problem
Mismatched keys clash. We have beat detection but no key detection (confirmed: none in the codebase). With MIDI steering (#46) and key detection in the Rust shell (ADR-0024), we can detect the playing deck's key and steer the generative deck to a compatible key automatically — generative harmonic mixing, beyond what a normal DJ setup can do.
Proposed approach (per ADR-0024 / ADR-0025)
Build chroma + key-profile detection behind an honesty gate (ADR-0024); publish the gated key as cross-deck state (ADR-0020's store, or the interim
analysis::Statebridge); map it to a scale/chord-tone multihot and send it over #46's note path, quantised to the playing deck's beat grid (fed from #47's Rust gate, ADR-0014) so harmony shifts on a bar, not mid-phrase.Acceptance criteria
Scope & non-goals
In scope: automatic key matching. Non-goals: manual play (the pad/keyboard steering issue); full chord-progression sequencing. Blocked by ADR-0024 + ADR-0025 (#45) and ADR-0020; depends on #46 and #47.