No description
Find a file
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
.beads fix(playground): resize canvas when switching output modes in Design B (meml-2c3) 2026-03-22 01:07:52 +02:00
.claude/worktrees/agent-ae87fe47/playground/js/shapeseq hello come back to me 2026-03-30 17:05:45 +03:00
.github/workflows feat(playground): add OSC output bridge for external synth control 2026-03-25 11:55:58 +02:00
.vscode memlnautmodes, channelstrip 2025-11-19 15:17:37 +00:00
data view order 2025-11-04 17:35:24 +00:00
modes verbfx freeverb 2026-03-18 16:29:54 +00:00
nisps-core feat(nisps-core,wasm): add per-sample weights to MLP training 2026-04-02 20:35:24 +01:00
playground feat(playground): add Modular audio mode with shared mod pool 2026-04-11 07:34:41 +02:00
src memlib 2026-03-18 16:30:19 +00:00
tests/e2e feat(playground): add Modular audio mode with shared mod pool 2026-04-11 07:34:41 +02:00
vcv fix(vcv): resolve 6 critical thread safety issues from code review 2026-03-28 02:02:11 +02:00
voicespaces bypass toggle colours 2025-12-10 17:35:48 +00:00
.gitignore feat(playground): add Modular audio mode with shared mod pool 2026-04-11 07:34:41 +02:00
.gitmodules Changed gitmodules to https 2025-04-29 10:21:43 +01:00
AGENTS.md fix(beads): use independent MEMLNaut-NISPS database, separate from shared beads_src 2026-03-04 23:45:35 +00:00
ChannelStripAudioApp.hpp stereo channel strip 2026-01-13 08:23:01 +00:00
CLAUDE.md docs: update CLAUDE.md with WASM engine architecture, testing, and debug probe 2026-04-03 17:40:12 +01:00
IMLInterface.hpp speed optim, no clicking 2025-05-07 23:58:06 +01:00
LICENSE Initial commit 2025-04-10 14:17:18 +01:00
MEMLNaut-NISPS.ino verbfx freeverb 2026-03-18 16:29:54 +00:00
NISPS_CORE_EXTRACTION_PLAN.md fix: audit and fix nisps-core extraction issues 2026-02-08 18:01:48 +01:00
NISPS_CORE_TASKS.md add nisps-core extraction task graph 2026-02-08 17:03:40 +01:00
package-lock.json feat(playground): add Modular audio mode with shared mod pool 2026-04-11 07:34:41 +02:00
package.json feat(tests): add Playwright e2e suite + debug probe for a-immersive 2026-04-03 16:38:04 +01:00
PAFSynthAudioApp.hpp memlnautmodes, channelstrip 2025-11-19 15:17:37 +00:00
playwright.config.js feat(tests): add Playwright e2e suite + debug probe for a-immersive 2026-04-03 16:38:04 +01:00
README.md playground: add expandable visual mode and docs 2026-02-14 08:47:47 +00:00
ThruAudioApp.hpp refactoring interface into modes 2025-11-24 11:29:33 +00:00
XiasriAnalysis.cpp xiasri latest, and channel strip changes for 4D input 2025-12-10 16:40:00 +00:00
XiasriAnalysis.hpp refactoring interface into modes 2025-11-24 11:29:33 +00:00
XIASRIAudioApp.hpp xiasri latest, and channel strip changes for 4D input 2025-12-10 16:40:00 +00:00

Neural Interactive Shaping of Parameter Spaces

https://musicallyembodiedml.github.io/memlnaut/approaches/nisps

Web Playground

Try NISPS in your browser — no hardware required:

cd playground
python3 -m http.server
# Open http://localhost:8000

Train a neural network to map joystick positions to generative visuals through interactive machine learning. Two learning modes: direct example mapping and reinforcement learning with thumbs up/down feedback.

The playground UI includes an Expand toggle on the visual surface so you can make the canvas nearly full-screen while compressing parameter/control panels into a minimal strip beneath it.