Skip to content

[P0] Draw synchronized pitch and volume envelopes for each oscillator #10

Closed

Description

@nosam1998

Parent plan: #1
Priority / gate: P0 / M2
Requirement: F13 in the PRD
Design: Technical design
Depends on: #3, #4, #9

Outcome

Let users shape how each oscillator's pitch and volume evolve over time using the same drawing workflow as its waveform.

Scope

  • Add per-oscillator pitch and gain lanes sharing duration, zoom, cursor, and playhead; default composition duration is 2 seconds within the 1 ms–10 second range.
  • Use a logarithmic pitch axis labeled in Hz with log-linear interpolation and positive 20–20,000 Hz bounds, subject to playback sample-rate restrictions.
  • Use linear gain from 0 to 1, with untouched gain at 1 and gain eraser writing zero; pitch eraser restores its base value, initially 440 Hz.
  • Provide pencil/line/numeric-knot editing, undo/redo, and editable pitch-sweep and attack/decay examples.
  • Keep waveform, pitch, and gain curves for the same oscillator in its persistent color, with labels and line-style/selection cues.

Acceptance criteria

  • Editing one lane or oscillator changes only its intended values; untouched values outside the edit are preserved.
  • Pitch cannot become zero, negative, or non-finite; gain remains finite in [0,1]. Exact numeric editing can express endpoints and intermediate knots.
  • All oscillator envelopes stretch consistently when composition duration changes, without confusing time with pointer-drawing speed.
  • Colors and labels match the associated waveform/controls and stay stable across selection, reorder, and reload.
  • All lane edits are undoable and the 20,000 total-point project limit is enforced before destructive changes.
  • Keyboard/numeric editing can create a pitch sweep and gain attack/decay without freehand drawing.

Validation

Geometry/unit/interpolation fixtures, independent lane/voice edit tests, synchronized viewport/time tests, history/limits checks, and keyboard/color-identity review.

Boundaries

Envelope drawing is a first-release requirement. Arbitrary parameter automation, MIDI, and external controllers remain outside this issue.

Implementation evidence

Independent log-pitch and linear-gain lanes, normalized composition time, exact numeric controls, presets, synchronized views and bounded undo are implemented and tested.

Merged work: #24, #29.

Validated CI run · Validation report. The report arrives with the final documentation PR; numerical/browser logs already exist. Release-wide human acceptance and the recorded performance/memory gaps remain explicit in #15 and #16.

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

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions