876 Commits

Author SHA1 Message Date
L'électron rare b954032165 feat(matrix): per-voice pose + finger/pinch events
Replace mat_colorpose/mat_colorpose_get OSCdefs with per-voice
mat_voicepose/mat_voicepose_get. Rewrite matPoseFire to iterate
matVoicePoses[name] using current bar color. Add matSetVoicePose,
matVoicePosePush, matEventFinger/Pinch mappers, mat_ev_finger/pinch
OSCdefs. Old color-pose functions left intact.
2026-06-29 14:39:01 +02:00
L'électron rare 0179e32837 feat(matrix): voicemod set/get OSC routes 2026-06-29 14:30:18 +02:00
L'électron rare 0c8ea8b104 feat(matrix): per-voice additive modulation pairs
Introduce ~matVoiceMods (IdentityDictionary voice→binding list) and
~matVoicePoses. Rewrite ~matModPairs to read ~matVoiceMods[name]
instead of spec[\mod], summing contributions per target additively.
Disallowed targets (not in ~matModTargets[name]) are silently dropped.
Test: pan-cancel, rev-depth, cutoff-gate — RED→GREEN confirmed.
2026-06-29 14:21:02 +02:00
L'électron rare 6964831036 feat(matrix): route new iphone mod sources 2026-06-29 14:01:50 +02:00
L'électron rare adeb98e569 docs(matrix): fix plan SC test protocol + paths 2026-06-29 13:58:08 +02:00
L'électron rare 73af4890b1 docs(matrix): per-voice mod/pose impl plan 2026-06-29 13:49:41 +02:00
L'électron rare ab265e4473 docs(matrix): mouthOpen now first-class source 2026-06-29 13:37:50 +02:00
L'électron rare fa7797d259 docs(matrix): per-voice mod/pose design spec 2026-06-29 13:36:27 +02:00
L'électron rare d646f4649d feat: 6 step patterns per colour on all voices
CI build oscope-of / build-check (push) Has been cancelled
2026-06-29 13:18:57 +02:00
L'électron rare 71926dec84 feat(matrix): per-step playhead /matrix/stephead
SC emits /matrix/stephead s (0-15) every 16th note via
~matStepRoutine (started/stopped with ~matPlay/~matStop).
Web highlights .seq-cell or .pr-cell[data-step] with
.playhead class; CSS adds white outline + brightness.
2026-06-29 13:13:40 +02:00
L'électron rare 80aa33a19c fix: push steps to surfaces on matrix load 2026-06-29 13:06:23 +02:00
L'électron rare 946b83d9ea fix(voiceeditor): colordefs stride 6→8, add res/rev
CI build oscope-of / build-check (push) Has been cancelled
SC ~matColorDefPush sends 8 fields per colour (stretch, octave,
amp, inst, cutoff, pan, res, rev). The JS receiver used stride 6,
so colours 2-6 parsed from shifted indices and res/rev were never
read — edits snapped back on every echo.

- Extract pure parseColorDefs(args) (stride 8, all 4 sentinels
  decoded: cutoff=-1, pan=-2, res=-3, rev=-4 → null); export it.
- Rewrite handler to use parseColorDefs; preserve mod/pose/steps.
- Fix stale CSS comment: 16x32 → 22x64.
- Add test/colordefs-parse.test.mjs (8 cases, guard against drift).
- node --test tests/*.mjs: 20/20 pass (was 12).
2026-06-29 12:37:56 +02:00
L'électron rare cde2882975 chore(voiceeditor): lowercase res/reverb labels
Synth/FX tab labels "RES"/"REVERB" -> "res"/"reverb" to match
all sibling labels (inst, stretch, oct, amp, cutoff, pan).

C5 headless tests: node --test 12/12, test_matrix TEST PASS,
presets 28/28, node --check 10/10 all green.
2026-06-29 12:24:50 +02:00
L'électron rare c0a360ff58 feat: synth/fx tab with res and reverb controls 2026-06-29 12:14:55 +02:00
L'électron rare 5aa9b31ec5 fix(voiceeditor): drum grid API + wheel rerender
- renderDrumGrid(vi, colour, body): explicit params, def guard
- wheel handler calls renderPattern so loud class stays in sync
- skip empty steps-mode-hdr for isDrumOnly voices
2026-06-29 12:10:18 +02:00
L'électron rare 1edeaf1e6e feat: adaptive pitch-roll and drum step modes
- stepMode map (per voice, persists for session) init from
  defaultStepMode(); melodic->pitch, drum/semi->drum
- renderStepsTab branches on stepMode[vi]: Pitch toggle shows
  a 15-row x 16-col piano-roll; Drum shows 3-level pads
- renderDrumGrid: click cycles off->soft(vel 0.6)->loud(vel 0.95);
  wheel fine-tunes vel; sends /matrix/step (degree 0 or -99)
- renderPitchRoll: one note per step, click places/moves/clears,
  wheel adjusts vel; sends /matrix/step (degree d or -99)
- Pitch|Drum toggle hidden for pure-drum voices (VOICE_CLASS=drum)
- CSS: .pianoroll/.pr-row/.pr-cell, .seq-cell.soft/.loud,
  .steps-mode-hdr/.steps-mode-btn; --pr-color/--row-color vars
- Guard added: renderStepsTab returns early if color def missing
2026-06-29 12:02:36 +02:00
L'électron rare e81a70de26 feat: tabbed voice editor
Split renderPattern into renderStepsTab, renderSynthFxTab,
renderModPoseTab behind a 3-tab bar. activeTab module state
resets to steps on open; colour selector stays above tabs.
Per-voice editor-row accent via borderLeftColor; mvoice-label
cursor moved to CSS.
2026-06-29 11:53:30 +02:00
L'électron rare 5470ae9ed5 feat: inline accordion voice editor
Replace fullscreen #colordef-modal with a .voice-editor-row that
expands inline under each voice in the matrix grid. One voice open
at a time; ▷ toggle rotates to ▼ when expanded; clicking label or
button calls toggle(vi, containerEl). Editor content (colour 1-6,
var row, steps, mod, pose, AUDITION) is identical, only location
changes. CSS: drop .cd-modal/.cd-panel, add .voice-editor-row /
.voice-expand-btn.
2026-06-29 11:43:04 +02:00
L'électron rare bc661aea5a refactor: extract matrix grid and voice editor
CI build oscope-of / build-check (push) Has been cancelled
2026-06-29 11:30:05 +02:00
L'électron rare aec2014b0a refactor: extract mixer transport scenes seq pads
Move five orthogonal concerns out of main.js into ES modules:
- mixer.js: per-voice fader/mute strips, /launch/vol sends
- transport.js: /sync/beat, /sync/rms, tempo/filter/quant DOM
- scenes.js: sceneMode, /scene/state, slot/prev/next wiring
- sequencer.js: rhythm+melody editors, avlive.seq persistence,
  /seq/* handlers, suppressEmit guard
- launchpad.js: armed/clipState, /armed/ prefix, pads, #clear

Each module exports init(); main.js calls all five in
DOMContentLoaded after loadMatState(). Matrix grid, colordef
modal, timeline, glow system, and generic buttons remain in main.js.
2026-06-29 11:22:10 +02:00
L'électron rare 8615472589 refactor: single colour palette via css vars
Install --m1..--m6 on :root from PALETTE in main.js at bootstrap.
Replace triplicated hex in mcell/cd-row/seq-row with var(--mN).
Remove local COLORS array from renderColorSel; use imported PALETTE.
matrix-state.js stays DOM-free.
2026-06-29 11:10:22 +02:00
L'électron rare b0357af715 refactor: extract matrix state and palette module 2026-06-29 11:01:27 +02:00
L'électron rare 3bab0d5e42 refactor: split osc transport into es module
Move control.js → js/main.js; extract WebSocket↔OSC bridge
into js/osc.js (send/on/onOpen/onClose/onPrefix exports).
Replace 250-line message switch with per-address on() and
onPrefix() registrations. Point index.html at module entry.
2026-06-29 10:49:42 +02:00
L'électron rare 7b35c19017 feat: per-colour res and rev in matrix engine 2026-06-29 10:33:52 +02:00
L'électron rare 3098593dd0 docs: matrix editor implementation plan
CI build oscope-of / build-check (push) Has been cancelled
2026-06-29 10:23:28 +02:00
L'électron rare 04ff9ceb22 docs: matrix editor refactor design spec
CI build oscope-of / build-check (push) Has been cancelled
Inline-accordion voice editor (tabs: steps / synth-fx / mod-pose),
adaptive pitch piano-roll vs drum step sequencer, synth+fx tab with
res/rev engine extension, ES-module split, single colour palette.
2026-06-29 10:18:58 +02:00
L'électron rare 8ebd028039 feat: matrix presets v3 - melodies + colour arcs
CI build oscope-of / build-check (push) Has been cancelled
Deep refactor of the 28 matrix presets for style fidelity:
- fix 6 invalid instrument assignments (silent lp_ fallback)
- per-style melodies via colorDefs steps on 7 mono voices
- exploit all 6 variation colours (build rolls, drop lift,
  half-time + octave-down break) instead of monochrome 1
- restore tribal_perc; validate kits against matInstChoices

Validated: 28/28 load via matLoadFile, all step patterns
stream clean on the per-color engine.
2026-06-29 09:58:39 +02:00
clement 929fd9aaf0 fix: colorpose list decode and migrate guard 2026-06-29 01:21:29 +02:00
clement 25bfdf0cb2 merge: reconcile per-color pattern with main
Context: main drifted in parallel (matrix v2: 22 voices x 64 bars,
28 presets, classic-machine instrument emulations) touching the same
files this branch rewrites (matrix.scd, control.js, test_matrix.scd,
launchpad.scd).

Resolution (semantic):
- matrix.scd auto-merged; engine (per-color ~matModPairs, pose fire,
  persistence + migration) composes with main's 22 voices via
  ~matVoices.size; SC test PASS, P:0 B:0.
- control.js: kept main's dynamic dimensions (MATRIX_VOICES.length,
  MATRIX_BARS=64); the per-color model (matColorDefs[vi][c].{mod,pose,
  steps}) wins, so matMod/matSteps/matPoses are removed (folded in);
  reintroduced 16/32 hardcodes replaced with the dynamic constants
  (16-step sequence arrays kept); matLoopEnd -> MATRIX_BARS-1;
  renderRhyGrid fixed to literal 16 steps. Color-centric modal,
  /matrix/colormod + /matrix/colorpose handlers, row-left live select
  retained.
- test_matrix.scd: unioned main's grid-migration tests with the
  per-color mod/pose/rev suite.

Validation: SC TEST PASS, node --check clean, glow 4/4, P:0 B:0,
zero matMod/matSteps/matPoses refs, zero voice-count-16 hardcodes.
2026-06-29 01:12:39 +02:00
clement f03b7bb3bd fix: guard colormod handlers and drop dead css
Add null guard to /matrix/colormod and /matrix/colorpose WS
handlers to prevent TypeError when legacy browser cache holds
null color slots. Remove dead CSS rules for .cd-tabs, .cd-tab,
.cd-tab.on, .cd-pane[hidden].
2026-06-29 00:56:51 +02:00
L'électron rare 2908dc4c28 feat: 28 matrix presets, 22 voices x 64 bars
CI build oscope-of / build-check (push) Has been cancelled
Rewrite the 16 classic presets and add 12 new (electro/EBM/
synthwave, DnB/jungle/footwork, melodic techno/progressive) as
22-voice x 64-bar arrangements with section arcs (intro/build/
rise/drop/plateau/break/outro) and per-preset machine kits
(909/808/303/juno/supersaw/minimoog/dx7/sp1200...). The generator
now emits the Event (grid+instruments) format. All load + valid.
2026-06-29 00:51:00 +02:00
clement 84054714d3 feat: web color-centric pattern editor 2026-06-29 00:50:38 +02:00
L'électron rare 042da7faa0 feat: matrix v2 - 22 voices x 64 bars
CI build oscope-of / build-check (push) Has been cancelled
Wire 6 new tracks (melody, chord, fx, snare, crash, shaker) into
~matVoices and extend the grid to 64 bars. Per-voice dicts (mod
targets, neutral cut, instrument choices) gain the new voices.
~matLoadFile auto-migrates any legacy grid (tile bars, pad voices)
so the old 16x32 presets still load. Web grid/mixer/timeline +
handlers de-hardcode 16/32/512 to MATRIX_VOICES.length/MATRIX_BARS.
Headless test assertions made dimension-dynamic.
2026-06-29 00:42:28 +02:00
clement 4cb6ce14c0 feat: persist and migrate per-color mod pose 2026-06-29 00:39:37 +02:00
clement dcb35772ae fix: restore rev mod target in matModPairs
The rev (reverb send) modulation target was dropped from ~matModPairs
when factoring capture effects. This branch now emits a 0..1 reverb
send scaled by mod depth, matching the previous engine behavior.
2026-06-29 00:30:21 +02:00
L'électron rare 7b458b8b58 feat: voices for new matrix tracks
CI build oscope-of / build-check (push) Has been cancelled
Add synthdefs (lp_snare, lp_crash, lp_shaker, lp_fx) and base
Pdefs (lp_melody, lp_chord, lp_fx, lp_snare, lp_crash, lp_shaker)
for 6 new matrix tracks. Foundation only -- not yet wired into
matVoices/the grid (the 22-voice x 64-bar core change + preset
migration + web overhaul comes next).
2026-06-29 00:30:04 +02:00
clement df04d8d051 feat: engine reads per-color mod and pose 2026-06-29 00:27:21 +02:00
L'électron rare dc766fe896 feat: more classic machine emulations
CI build oscope-of / build-check (push) Has been cancelled
Web-researched the iconic machines per style and added 7 more:
Minimoog (ladder bass/lead), Roland JP-8000 supersaw (trance/
progressive), Juno-106 (chorus pad), Yamaha DX7 (FM), E-mu
SP-1200 (12-bit drum crunch), Akai sampler (lo-fi grit) and
Roland System-100. Standard UGens only (MoogFF/Latch/DelayC).
Wired per voice into the choices + web mirror; all kit/test
instrument targets kept in the choice lists.
2026-06-29 00:20:34 +02:00
clement 25ce6e0139 docs: keep live row instrument select in plan 2026-06-29 00:15:26 +02:00
clement b18cb7c514 fix: fresh color pose arrays and guards
Replace pose: [] with pose: Array.new to ensure fresh arrays per color.
Guard nil action in ~matSetColorPose with default \trigger.
Add test assertions for dedup, echo, and out-of-bounds safety.
2026-06-29 00:14:23 +02:00
L'électron rare c535367817 feat: classic-machine instrument emulations
CI build oscope-of / build-check (push) Has been cancelled
Add faithful-ish TR-909 (kick/clap/hat/ride), TR-808 (kick/clap/
hat/cowbell), TB-303 (acid), Korg MS-20 and Roland SH-101 as extra
matrix instrument choices. All note-terminating (perc+doneAction
or gated ASR), Pbind-safe, with pan + reverb send; standard UGens
only. Wired into ~matInstChoices and the web mirror per voice.
2026-06-29 00:08:25 +02:00
clement 6cf09c21be feat: per-color mod and pose state 2026-06-29 00:06:28 +02:00
clement a87044f698 docs: per-color pattern implementation plan 2026-06-29 00:03:53 +02:00
clement be02a71bde docs: per-color pattern restructure design 2026-06-29 00:01:24 +02:00
clement 74e43d6915 chore: remove dead css and polish
Remove dead per-row .minst/.mmod CSS rules (moved to modal).
Add self-healing guard in renderPoses for malformed localStorage.
2026-06-28 23:55:54 +02:00
clement 8c7a1aee00 merge: reconcile per-instrument editor with main
Context: main added a richer capture-modulation palette (more mod sources
and targets in matrix.scd, control.js, launchpad) in parallel with the
complete per-instrument editor build. Both touch the mod/matrix surfaces.

Approach: git auto-merged cleanly (disjoint hunks); validated semantically.

Changes:
- matrix.scd unions the new mod-source/target palette with the step-sequence
  engine, pose bindings, and colorDefs steps.
- control.js: the modal Assign pane iterates the enriched MATRIX_MOD_SOURCES,
  so the new sources appear automatically; row consolidation and the step and
  pose tabs are intact.

Impact: the per-instrument editor (instrument, colors, 16-step per-color
sequencer, capture assignment with the richer palette, pose bindings) coexists
with main's mod palette. SC test PASS, P:0 B:0, node --check OK.
2026-06-28 23:51:18 +02:00
clement 2d64e8d6aa fix: clamp step degree and gate drum freq 2026-06-28 23:47:58 +02:00
L'électron rare 68e5c5c8a8 feat: richer matrix capture-modulation palette
CI build oscope-of / build-check (push) Has been cancelled
Add horizontal position sources (bodyX, lHandX, rHandX) and make
pan + a per-voice reverb send (rev) modulatable on every voice,
plus cutoff on perc and reese. All lp_ synthdefs gain pan + rev
(send to the reverb bus, nil-safe); perc/reese gain a cutoff
control that keeps their freq-tracking timbre when unmodulated.
matrix.scd mod sources/targets/neutral-cut + a rev modPairs
branch (in the color-editor overlay); web mod mirror updated.
2026-06-28 23:42:29 +02:00
clement 8e6434cf2a feat: web matrix pose bindings tab 2026-06-28 23:35:28 +02:00
clement 25acb50e59 feat: web matrix step sequencer grid 2026-06-28 23:28:24 +02:00