Skip to content

Harmonic auto-mix: steer the generative deck to the playing deck's key #51

Description

@brxs

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.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions