Skip to content

Phase 3 / M7: Render deterministic dual-engine patch crossfades #12

Open

Description

@norbot7865

Objective

Safely replace incompatible patches using a preconstructed dual-engine transition with deterministic linear/equal-power crossfades.

Scope

  • Build replacement controlled engines entirely outside the audio callback.
  • Implement transition slots, old/new routing, active-note policy, generation acknowledgement, cleanup, and stale-handle invalidation.
  • Implement exact-duration linear and equal-power gain curves; default to 20 ms and support validated 0–250 ms configuration.
  • Route new notes to the new engine at the transition frame and release/migrate old voices according to documented compatibility policy.
  • Add hard-swap fallback warnings and preserve the old engine on initialization failure.
  • Record transition traces, render/callback costs, budget utilization, underruns, and strategy statistics.
  • Add incompatible/compatible fixtures, click metric comparison, finite/silence/clipping checks, race tests, and block-size matrix.

Acceptance criteria

  • Incompatible redefinition crossfades for exactly the requested frames without compiling or unbounded allocation on the audio thread.
  • Output is deterministic, finite, block-size invariant, and less discontinuous than the calibrated hard-swap baseline.
  • Failed transitions leave the previous engine running.

Spec: phase-3.md §§17–19, 25, 27–33, 35–36, 40 (Milestone 7), 42.

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or requestphase-3Phase 3: live controls, automation, MIDI, patch transitions, and nREPL

    Projects

    No projects

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions