Skip to content

Phase 3 / M2: Implement persistent controlled-Sointu adapter #7

Closed

Description

@norbot7865

Objective

Allow compiled Sointu unit parameters to receive persistent host control values without rebuilding or updating the patch for each write.

Scope

  • Introduce the internal controlled-synth abstraction and generation-specific binding table.
  • Implement persistent external-control storage and documented schema-driven effective-value calculation.
  • Support instrument-wide and per-voice writes, reads, resets, range transforms, and binding-count inspection.
  • Preserve normal Sointu behavior byte-for-byte/tolerance-equivalently when no controls are declared.
  • Keep allocations, blocking locks, logging, Lisp evaluation, and compilation out of the render callback.
  • If needed, add the minimal isolated Go VM patch, regression tests, and upstream/removal documentation identified in M0.
  • Add adapter tests using the real pinned Sointu implementation.

Acceptance criteria

  • External values persist until replaced/reset/invalidated and measurably affect rendered audio.
  • Instrument and voice binding writes work without Synth.Update or patch recompilation.
  • Uncontrolled Phase 1/2 patches render unchanged.

Spec: phase-3.md §§5–6, 9, 18.6, 30–33, 40 (Milestone 2), 41–42.

Activity

  1. added
    enhancementNew feature or request
    phase-3Phase 3: live controls, automation, MIDI, patch transitions, and nREPL
    on Jul 15, 2026
  2. added this to the Phase 3 milestone on Jul 15, 2026
  3. self-assigned this
    on Jul 15, 2026
  4. norbot7865 commented on Jul 15, 2026

    @norbot7865
    CollaboratorAuthor

    Feasibility result: pinned Sointu v0.6.0 compiles settable/modulatable parameters into a private bytecode operand stream and exposes only Synth.Update; ordinary host control is not possible through its public interface. I will vendor the minimal build-required Go source (~150 KiB, root/vm/oto), add operand binding metadata plus per-voice persistent overrides to vm.GoSynth, retain unchanged behavior when controls are absent, and document the patch/removal plan. This avoids patch recompilation and Synth.Update for control events and supports voice scope.

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

Metadata

Metadata

Assignees

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