No description
Find a file
w1n5t0n 5fc37f760e Stream 6: extract firmware glue under firmware/
Move the Arduino sketch into firmware/MEMLNaut-NISPS/ and bridge the
hardware (memllib) to the platform-agnostic nisps/ library through a
slim glue layer. Delete the legacy root-level *AudioApp.hpp,
modes/MEMLNautMode*.hpp, voicespaces/, IMLInterface.hpp, XiasriAnalysis,
and the src/memlp submodule.

Glue layout (firmware/MEMLNaut-NISPS/glue/):
  audio_driver.hpp - bridge memllib block callback to Mode::process
                     via per-Mode templated trampoline (no virtual dispatch)
  peripherals.hpp  - joystick/pots/buttons -> Mode::set_input + ML primitives
  midi_io.hpp      - MIDI in -> mode.note_on/update_bpm/set_playing,
                     drains mode ControlEvent ring -> MIDI UART
  mode_select.hpp  - using-aliases mapping MEMLNautMode<Name> to
                     nisps::modes::*Mode (build script rewrites the
                     #define MEMLNAUT_MODE_TYPE line)
  input_router.hpp / output_router.hpp - top-level wire/drain entry points

The sketch tree uses src/{memllib,daisysp,nisps} symlinks because
Arduino-CLI rejects ".." in include paths from sketch-tree headers.
mode_select.hpp #undefs Arduino's sq/min/max/abs/round macros before
including nisps headers (some nisps engines use those identifiers as
method names). The audio bridge struct is extern in the header and
defined in the .ino because inline + __not_in_flash section attribute
collide at link time.

Verification: arduino-cli compile succeeds for PAFSynth, ChannelStrip,
and BreakOr (rp2040:rp2040:solderparty_rp2350_stamp_xl:opt=Optimize3,
-std=gnu++20). Host C++ tests under nisps/build still pass (3 binaries,
110+ tests). Build script (scripts/build-firmware.sh) updated to point
at the new sketch path; mode-rewrite logic unchanged.

Closes meml-gkm.
2026-04-29 17:05:38 +03:00
.beads Improve UF2 bootloader detection 2026-04-16 00:52:39 +09: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
codegen fix: wire generated C++ schemas to nisps::Curve from core/math.hpp 2026-04-29 15:43:42 +03:00
data view order 2025-11-04 17:35:24 +00:00
docs/redesign docs: capture playground redesign intent from _rewound snapshot 2026-04-29 13:32:39 +03:00
firmware Stream 6: extract firmware glue under firmware/ 2026-04-29 17:05:38 +03:00
nisps merge stream 7: WASM bindings + AudioWorklet (meml-tgm) 2026-04-29 16:38:57 +03: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/wasm): WASM bridge between C++ core and SolidJS playground (meml-tgm) 2026-04-29 16:36:29 +03:00
schemas Add mode schemas + meta-schema (Stream 5 / meml-7k6) 2026-04-29 15:28:49 +03:00
scripts Stream 6: extract firmware glue under firmware/ 2026-04-29 17:05:38 +03:00
src Stream 6: extract firmware glue under firmware/ 2026-04-29 17:05:38 +03:00
tests test(nisps/modes): host C++ tests for stream 4 mode layer (meml-beb) 2026-04-29 16:27:03 +03:00
vcv fix(vcv): resolve 6 critical thread safety issues from code review 2026-03-28 02:02:11 +02:00
.gitignore feat(playground): add Modular audio mode with shared mod pool 2026-04-11 07:34:41 +02:00
.gitmodules Stream 6: extract firmware glue under firmware/ 2026-04-29 17:05:38 +03:00
AGENTS.md fix(beads): use independent MEMLNaut-NISPS database, separate from shared beads_src 2026-03-04 23:45:35 +00:00
CLAUDE.md Stream 6: extract firmware glue under firmware/ 2026-04-29 17:05:38 +03:00
LICENSE Initial commit 2025-04-10 14:17:18 +01:00
MAP.md Stream 6: extract firmware glue under firmware/ 2026-04-29 17:05:38 +03: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
playwright.config.js feat(tests): add Playwright e2e suite + debug probe for a-immersive 2026-04-03 16:38:04 +01:00
README.md Preserve firmware variant capitalization 2026-04-16 00:46:02 +09:00

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_xl with Optimize3.
  • The build forces C++20 because the firmware uses std::span and concepts.
  • build-firmware.sh accepts an optional variant name such as MEMLCelium or BreakOr. Matching remains case-insensitive, so memlcelium still works. If you omit it in an interactive shell, the script parses MEMLNaut-NISPS.ino, prompts for a variant, and rewrites the active MEMLNAUT_MODE_TYPE before building.
  • flash-firmware.sh accepts an optional mountpoint argument, or auto-detects common UF2 bootloader mounts such as /run/media/$USER/RP2350 and /run/media/$USER/RPI-RP2.

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.