memlnaut-nisps/playground/js/ui
monkey-w1n5t0n afff406d92 feat(playground): add Modular audio mode with shared mod pool
New "Modular" engine in a-immersive with three hot-swappable Faust
sub-engines (subtractive/additive/fm) sharing a common modulation pool:
16 ADSR slots + 32 LFO slots (single-knob sine->tri->square->saw
wavemorph) routed through a 48-source x 10-destination matrix per
engine. Per-connection scalar amounts in [-1, 1], summed at each
destination. Default MLP output count is 512 (32 mod-source params +
480 matrix cells); model reinits on sub-engine swap, count change, or
engine-param exposure toggle.

Faust layer:
- mod-pool.lib: shared ADSR/LFO/source-bus library
- gen-modular-dsp.py: byte-reproducible generator (source of truth)
- modular-subtractive: faithful Minimoog (3 osc, ladder filter, no envs)
- modular-additive: 64-partial, spectral shape + formants, no envs/LFOs
- modular-fm: 4-op matrix + self-feedback, no envs
- All three share d08=amp, d09=pan conventions
- MODULAR_DESTINATIONS.md: authoritative destination table

JS layer:
- ModularEngine: self-contained SynthEngine with getState/setState,
  setSubEngine, setModSourceCount, setExposeEngineParam
- modular-ui: drawer with sub-engine toggle, ADSR/LFO count steppers,
  per-slot enable switches, matrix grid editor (tap-cycle, long-press
  precise, right-click menu, negative amounts), preset overlay
- modular-presets: 6 named presets (Slow pad, Plucky bass, Crystal,
  DX bell, Morphing drone + default)
- a-app.js: Modular mode registered, paramMeta:change -> resizeMLP,
  modular DSP state persisted under modularDspState, window.__nisps
  debug hooks for programmatic control

Tests: tests/e2e/modular-mode.spec.js (11 Playwright tests, all passing
including DSP state survives reload, sub-engine swap keeps paramCount,
preset apply verification).

Also fixes a pre-existing build.sh bug where the -e flag caused faust
to overwrite .wasm outputs with expanded DSP source text, leaving
additive/fm-matrix/eoc-* committed as invalid WebAssembly. Rebuilt all
affected engines with the corrected script. Added an early-message
buffer to faust-worklet-processor.js so setParam calls arriving before
wasm instantiation are queued rather than dropped (needed when the user
configures modular state before clicking Start Audio).
2026-04-11 07:34:41 +02:00
..
ab-compare.js feat(playground): implement Phases 2-4 of control surface spec 2026-03-26 10:48:12 +02:00
auto-explore.js feat(playground): implement Phases 2-4 of control surface spec 2026-03-26 10:48:12 +02:00
control-surface-ui.js hello come back to me 2026-03-30 17:05:45 +03:00
control-surface.js hello come back to me 2026-03-30 17:05:45 +03:00
controls.js feat(playground): unify learning modes, add MIDI input and gamepad support 2026-03-22 11:01:50 +02:00
dev-panel.js feat(playground): add MediaPipe hand tracking input with dev panel 2026-03-23 23:28:58 +02:00
engine-switcher.js feat(playground): engine switcher UI component (meml-phg) 2026-04-03 17:49:07 +01:00
eoc-chain-ui.js Merge EOC Delay + Saturation + Master Bus modules (meml-2sl, meml-2zm) 2026-04-03 18:22:00 +01:00
eoc-joystick.js feat(playground): EOC NISPS Independent mode — separate FX joystick (meml-vqo) 2026-04-03 18:21:59 +01:00
gamepad.js feat(playground): expand gamepad support with face buttons and Steam Deck fixes 2026-03-22 22:40:15 +02:00
gradient-flow.js feat(playground): implement Phases 2-4 of control surface spec 2026-03-26 10:48:12 +02:00
hand-tracker.js feat(playground): add MediaPipe hand tracking input with dev panel 2026-03-23 23:28:58 +02:00
input-heatmap.js feat(playground): batch inference support in input heatmap 2026-04-03 17:18:01 +01:00
input-pipeline.js fix(playground): 3 bugs found during bug hunt 2026-04-03 17:30:26 +01:00
joy-map-enhanced.js hello come back to me 2026-03-30 17:05:45 +03:00
joystick.js style(playground): unify dark theme with orange accents and improve RL button layout 2026-03-22 01:36:00 +02:00
modular-ui.js feat(playground): add Modular audio mode with shared mod pool 2026-04-11 07:34:41 +02:00
output-pipeline.js feat(playground): implement Phases 2-4 of control surface spec 2026-03-26 10:48:12 +02:00
param-display.js style(playground): unify dark theme with orange accents and improve RL button layout 2026-03-22 01:36:00 +02:00
param-pin.js feat(playground): implement Phases 2-4 of control surface spec 2026-03-26 10:48:12 +02:00
phase2-ui.js feat(playground): implement Phases 2-4 of control surface spec 2026-03-26 10:48:12 +02:00
phase3-ui.js feat(playground): implement Phases 2-4 of control surface spec 2026-03-26 10:48:12 +02:00
phase4-ui.js hello come back to me 2026-03-30 17:05:45 +03:00
pressure-feedback.js feat(playground): implement Phases 2-4 of control surface spec 2026-03-26 10:48:12 +02:00
region-pin.js feat(playground): implement Phases 2-4 of control surface spec 2026-03-26 10:48:12 +02:00
session-presets.js feat(shapeseq): session serialization + preset integration 2026-04-07 00:01:12 +01:00
snapshot-stack.js fix(playground): 3 bugs found during bug hunt 2026-04-03 17:30:26 +01:00
visualizer.js playground: add orbiting repulsor field controls 2026-02-11 15:50:06 +00:00
weight-health.js feat(playground): implement Phases 2-4 of control surface spec 2026-03-26 10:48:12 +02:00