No description
Phase 1 group 8 (S8, ST2, L14). - S8: the vendored src/daisysp tree (96 files, 41 .cpp compiled into every firmware build) and its sketch-tree symlink. Zero consumers — nisps replaced daisysp's PitchShifter with a custom granular implementation. Corrected firmware/README.md and setup-firmware-toolchain.sh, which called it a live submodule. The attribution comment in nisps/dsp/pitch_shift.hpp stays: it is an honest provenance note about a port, not a dependency. Noted while verifying: src/memllib/examples/KassiaAudioApp includes ../../daisysp/..., but examples/ is not symlinked into the sketch tree and is never compiled by the firmware build, so the deletion stands. - ST2: input_router.hpp was a zero-logic speculative layer with one consumer; the .ino now calls bind_peripherals directly. - L14: peripherals.hpp — deleted kAnalogInputCount, PeripheralBindings and the unused spread local, and extracted the duplicated commit-and-train block into one helper. The audit's suggested commit_and_train(mode, feedback) signature could NOT be behaviour-identical: repositioning() implies placing() (both live in ExploreState::Placing), so dispatching on feedback state inside the helper would silently reroute a TogB2 press mid-reposition from commit_place to commit_reposition, which differs (no snapshot restore, clears reposition_). Implemented as commit_and_train(mode, feedback, bool reposition) with the branch decided at the call site, preserving behaviour. Firmware is not compiled by any gate yet (that arrives with the PlatformIO migration, plan §5/S9), so this group is verified by reading and grep only. Gates: run-all-tests.sh ALL GREEN. |
||
|---|---|---|
| .github/workflows | ||
| .vscode | ||
| assets/media | ||
| codegen | ||
| docs | ||
| firmware | ||
| manifold | ||
| nisps | ||
| schemas | ||
| scripts | ||
| src | ||
| tests/cpp | ||
| vcv | ||
| .envrc | ||
| .gitignore | ||
| .gitmodules | ||
| AGENTS.md | ||
| ALIGNMENT.md | ||
| CLAUDE.md | ||
| LICENSE | ||
| MAP.md | ||
| README.md | ||
| synth-midi-cc.json | ||
Neural Interactive Shaping of Parameter Spaces
https://musicallyembodiedml.github.io/memlnaut/approaches/nisps
Firmware
The hardware firmware targets the MEMLNaut RP2350 build and uses repo-local helper scripts for the known-good build configuration:
git submodule update --init --recursive
scripts/build-firmware.sh
scripts/flash-firmware.sh
scripts/build-and-flash-firmware.sh
Notes:
- The scripts build for
rp2040:rp2040:solderparty_rp2350_stamp_xlwithOptimize3. - The build forces C++20 because the firmware uses
std::spanand concepts. build-firmware.shaccepts an optional variant name such asMEMLCeliumorBreakOr. Matching remains case-insensitive, somemlceliumstill works. If you omit it in an interactive shell, the script parsesMEMLNaut-NISPS.ino, prompts for a variant, and rewrites the activeMEMLNAUT_MODE_TYPEbefore building.flash-firmware.shaccepts an optional mountpoint argument, or auto-detects common UF2 bootloader mounts such as/run/media/$USER/RP2350and/run/media/$USER/RPI-RP2.
Manifold (browser app)
Try NISPS in your browser — no hardware required. Manifold is the React front-end running the same C++ engines + ML as the firmware, compiled to WASM:
cd manifold
bun install
bun run dev
Staging deployment: https://meml.lnfinitemonkeys.org/next/
Train a neural network to map input gestures to synth parameters through interactive machine learning: place examples, or use verdict-based feedback (explore-and-place, geometric dislike).
(The former SolidJS playground was retired in July 2026 — archived on branch
archive/playground-solidjs, tag playground-solidjs-final.)