876 Commits

Author SHA1 Message Date
clement d1c9485904 feat: unified per-instrument editor modal
Consolidate per-row instrument select and mod controls into a
tabbed modal (Instrument, Colors, Sequence, Assign, Poses tabs).
Remove .minst/.mmod/.minst-head/.mmod-head from matrix rows;
.minst-edit stays as modal trigger. WS echo handlers repointed
to modal elements (#cd-inst-sel, .cd-mod-src/tgt/dep), updating
JS state regardless of modal visibility. Steps/poses panes are
empty stubs, requesting /matrix/steps/get and /matrix/poses/get
on open (wired in Tasks 6-7).
2026-06-28 23:20:22 +02:00
clement 74b1ccfa1a fix: guard pose fire and test gate
Adds nil-guard to ~matPoseFire's per-voice binding loop to prevent
raised when ~matPoseBindings[vi] is nil. Adds gate binding test in
test_matrix.scd to verify \gate action is stored correctly.
2026-06-28 23:14:51 +02:00
clement 07268dd8f3 feat: matrix pose bindings and fire 2026-06-28 23:09:27 +02:00
clement 89d201b068 feat: persist matrix step sequences 2026-06-28 22:58:46 +02:00
clement 3d38b1006e fix: live steps read and stepped glow 2026-06-28 22:48:16 +02:00
clement 296dc99435 feat: matrix per-color step sequence engine 2026-06-28 22:41:12 +02:00
clement 39ac9406a8 fix: guard matrix steps push bounds 2026-06-28 22:36:39 +02:00
clement 8f6886f44e docs: fix step push size in plan 2026-06-28 22:32:52 +02:00
clement 9f7f8558d4 feat: matrix per-color step state and push 2026-06-28 22:31:44 +02:00
clement 3eb6426f61 docs: complete per-instrument editor plan 2026-06-28 22:24:58 +02:00
clement 8a3e7fa5cb Merge branch 'feat/matrix-followups' into feat/matrix-instruments 2026-06-28 22:18:11 +02:00
clement 162eab3d2e docs: complete per-instrument editor design 2026-06-28 22:16:09 +02:00
clement 2a03a40270 fix: matrix follow-up polish
- pass base into matVariationOverlay (no double matBaseFor call)
- add nil fallback (? 1.0) on spec[\amp] in mod-amp Pfunc
- push colorDefs for all voices after matLoadFile
- guard Pdef.play to fire once in matAudition routine
- beforeunload stops audition if active (tab close)
- add color-1 identity assertion to test_matrix.scd
2026-06-28 22:00:20 +02:00
clement 0edaf7b2ba Merge commit '05f16aa' into feat/matrix-instruments 2026-06-28 21:53:39 +02:00
clement 05f16aa886 merge: reconcile color editor with main
Context: main advanced in parallel (octave->freqRatio variation rework,
drone-instrument free fix, mixer/loop/seek) while the per-instrument
color-editor feature was built on an isolated branch. Both heavily edited
~matVariation, producing a semantic conflict.

Approach: keep the color-editor's per-voice editable ~matColorDefs as the
variation source, but adopt main's freq-multiply scheme for octave colors
so editable octaves transpose voices that compute \freq via Pfunc.

Changes:
- ~matVariationOverlay drops \octave; derives freqRatio = 2**octave and adds
  a pitched-only \freq multiply, appended with instPair, cdPairs and modPairs
  (mod last so live capture overrides static color cutoff/pan).
- ~matVariation reads ~matColorDefs[vi][color] (per-voice editable) instead
  of main's hardcoded freqRatio table.
- test_matrix.scd unions the color-editor and loop-region test blocks.
- control.js/control.css/index.html union the mixer/timeline and color-editor
  modal additions (auto-merged).

Impact: per-voice editable colors (variation, sound, audition) coexist with
main's freqRatio transpose, per-voice mixer volume, loop/seek, presets, glow,
instrument selection and capture-effect. SC test PASS, P:0 B:0, node --check OK.
2026-06-28 21:51:22 +02:00
clement d11addea4a fix: clear color instrument via string default 2026-06-28 21:45:26 +02:00
clement 532b23735c docs: coerce color inst string in plan 2026-06-28 21:44:02 +02:00
L'électron rare 684ea5d4d3 fix: matrix drops never-freeing drone instruments
CI build oscope-of / build-check (push) Has been cancelled
The instrument-override / kit feature offered continuous \do_
drones (do_drone, do_body_drone, do_body_gran, do_weather,
do_geo) that have no gate and no doneAction. Driven per-note by
the Pbind they never free and pile up forever (observed 5+
do_body_drone stacked, surviving /matrix/stop).

Drop them from ~matInstChoices, ~matKits and the web mirror;
substitute gated \lp_ sustained voices. ~matApplyInstrument and
~matLoadFile validate against the choices, so saved presets and
kits referencing the drones now fall back to the default voice.
2026-06-28 21:39:56 +02:00
clement 96ea70a645 fix: color editor loop and header align
Extract renderColorDefRows so WS handler never triggers
colordefs/get; add minst-edit-head spacer (22px); clear
cd-audition .on class on modal close.
2026-06-28 21:37:44 +02:00
clement f5527369ca docs: fix color editor loop and header in plan 2026-06-28 21:36:28 +02:00
clement b90d0ad802 feat: web matrix color editor modal 2026-06-28 21:29:32 +02:00
clement a95db5efd7 feat: persist matrix color defs in presets 2026-06-28 21:24:57 +02:00
clement a17e417fa3 feat: matrix color audition loop 2026-06-28 21:19:23 +02:00
clement 51f5bff1bf fix: color def echo uses plural push 2026-06-28 21:16:26 +02:00
L'électron rare ce46a27903 feat: concert launcher boots matrix mode
CI build oscope-of / build-check (push) Has been cancelled
Repurpose AV-Live Concert.app to launch the matrix arranger:
boot SC with MATRIX_ONLY, keep the pose pipeline (feeds the
/pose/* capture-modulation sources), drop the morceau button,
and load a preset (MATRIX_PRESET, default techno_drive) + start
the playhead instead of switching to the concert scene.
2026-06-28 21:16:00 +02:00
clement b154d1cbd4 feat: matrix color def set and push 2026-06-28 21:04:44 +02:00
L'électron rare 7675c2ac11 fix: matrix octave colors and sustained lead
CI build oscope-of / build-check (push) Has been cancelled
Matrix colors 3/5 pushed a dead \octave key; every pitched Pdef
sets \freq directly so the transposition was inaudible. Replace
with a base-\freq multiplier (x2/x0.5) over the Pchain, gated to
pitched voices so drums and instrument overrides keep their pitch.

Add a dedicated sustained \lp_lead SynthDef (gated ASR) and point
Pdef(\lp_lead) at it with \legato so lead notes hold; arp and stab
stay on \lp_pluck.
2026-06-28 21:00:47 +02:00
clement daeb1e6c1e feat: per-voice editable matrix color defs 2026-06-28 20:53:43 +02:00
clement a6dce8e712 docs: matrix color editor implementation plan 2026-06-28 20:42:04 +02:00
clement 1df8b89ac3 merge: reconcile instrument and capture with main
Merge main (presets, loop/seek, per-voice mixer) into the SDD branch.
matVariation combines main per-voice volume amp with the instPair and
modPairs spread; volume is propagated into the mod amp formula. Both
OSCdef sets (mod/capture + loop/seek) and both test blocks are kept.
2026-06-28 20:35:07 +02:00
clement 210a224e68 fix: add matrix mod header spacer
Add .mmod-head spacer to header row to align with voice row's
sticky-right .mmod block, matching .minst-head pattern on left.
Width: 192px (64+64+56 children widths + 4px padding-left).
2026-06-28 20:23:31 +02:00
clement a01d09287b merge: matrix mixer + per-voice volume fix
CI build oscope-of / build-check (push) Has been cancelled
Bring the per-instrument mixer (web) and the matrix \amp respecting
per-voice volume (matrix.scd) from origin/main 6a14b3b. Disjoint from
local commits, clean auto-merge.
2026-06-28 20:16:51 +02:00
clement 8bb1b778ed feat: web matrix capture mod controls
Add per-voice mod controls (source select + target select + depth range)
sticky-right in each matrix row. WS handlers for /matrix/mod (single)
and /matrix/mods (bulk 48-flat). Persist mod state in localStorage
alongside grid/inst. MATRIX_MOD_TARGETS mirrors SC ~matModTargets.
2026-06-28 20:16:12 +02:00
L'électron rare 6a14b3b67d feat: web matrix mixer per-instrument strips
CI build oscope-of / build-check (push) Has been cancelled
2026-06-28 20:10:30 +02:00
clement fd60783047 feat: persist matrix mods in presets 2026-06-28 20:09:35 +02:00
L'électron rare 29e0df3378 fix: matrix variations respect per-voice volume
CI build oscope-of / build-check (push) Has been cancelled
2026-06-28 20:07:06 +02:00
clement 96bb1151a7 fix: guard matrix mod OSC arg 2026-06-28 20:06:49 +02:00
clement 97905fa2e6 docs: guard matrix mod OSC arg in plan 2026-06-28 20:06:24 +02:00
clement 3ece3c9e8e feat: per-voice matrix capture modulation 2026-06-28 20:01:20 +02:00
clement e33796c1b4 feat: matrix capture mod source cache 2026-06-28 19:51:08 +02:00
clement 1b922d446f fix: align matrix header and guard load
- Add 78px instHead spacer in renderMatrix() header row so bar
  numbers align with voice row cells (fixes 78px left drift).
- Remove dead MATRIX_KITS constant (kit dispatch uses data-kit).
- Guard loadMatState grid assignment with length === 16 shape
  check on both object and legacy bare-array branches.
2026-06-28 19:46:42 +02:00
clement d2636d4a12 feat: web matrix instrument selects and kits
Add per-voice instrument <select> (sticky-left) populated from
MATRIX_INST_CHOICES, kit buttons in the matrix transport, contextmenu
right-click cell-clear, and WS handlers for /matrix/instrument and
/matrix/instruments. Persist instrument choices alongside the grid in
localStorage with legacy bare-array backward-compat in loadMatState.
2026-06-28 19:40:33 +02:00
clement 38f1974455 feat: persist instruments in matrix presets 2026-06-28 19:33:56 +02:00
clement 744ba6475a fix: nil instrument and OSC arg guards 2026-06-28 19:28:38 +02:00
clement 528a9398b5 merge: matrix loop region + timeline UI
Bring the editable loop region/seek (matrix.scd) and the web timeline
header (origin/main f9da19f) into the feature branch. Disjoint from the
local commits, clean auto-merge.
2026-06-28 19:27:48 +02:00
clement 2d767e8d98 docs: fix plans nil-instrument overlay bug 2026-06-28 19:25:20 +02:00
L'électron rare f9da19f547 feat: web matrix timeline loop and seek
CI build oscope-of / build-check (push) Has been cancelled
Add 32-bar timeline header above the matrix grid in #tab-matrix.
- Tap a bar: sends /matrix/seek <bar>
- Drag across bars: sends /matrix/loop <min> <max>
- BOUCLE COMPLETE button: resets to /matrix/loop 0 31
- .in-loop highlight from /matrix/loop feedback
- .tl-head moves with /matrix/playhead (O(32))
- Pointer Events API (pointerdown/move/up + setPointerCapture +
  elementFromPoint) — works on desktop mouse and iPad touch
2026-06-28 19:24:01 +02:00
clement 987df60b10 docs: matrix per-instrument color editor design 2026-06-28 19:21:58 +02:00
L'électron rare 529d6c5cd9 feat: matrix loop region and seek 2026-06-28 19:18:17 +02:00
clement 3fb9e0eca0 feat: per-voice matrix instrument + kits 2026-06-28 19:16:05 +02:00