memlnaut-nisps/nisps
w1n5t0n b6b4cf7362 feat(nisps/modes): scaffolding for platform-agnostic mode layer (meml-beb)
Adds two foundational pieces shared by every concrete mode:

  - `base.hpp`: defines `nisps::ParamSchema` (the aggregate type the
    `Mode` concept's `param_schema()` returns by const-reference),
    `nisps::ControlEvent`, and `ModeBase<Derived, EngineT, MLPType,
    NInputs>` — a CRTP scaffold absorbing input forwarding, ML
    inference + voice space mapping, engine.set_params() routing, and
    a per-mode ControlEvent ring buffer for MIDI/I2C events.

    `ModeRoutesOutputsToEngine<Derived>` lets a derived mode (e.g.
    SoundAnalysisMIDI) opt out of routing ML outputs to engine
    params when its outputs become MIDI CCs instead.

  - `voice_space.hpp`: `VoiceSpaceEntry` + `make_voice_space_entries()`
    + `find_voice_space()` helpers. Voice-space *mapping code* lives
    inside engines (mirroring firmware); mode layer just selects
    which voice space the engine uses by index/name.

No heap, no virtuals, no Pico/Arduino dependencies; satisfies stream
4 of architecture.md.
2026-04-29 16:26:33 +03:00
..
core feat: nisps/core foundation — perf, types, concepts, buffers, rng, math 2026-04-29 15:21:52 +03:00
dsp feat(nisps/dsp): lean DSP primitives ported from maximilian (meml-1v6) 2026-04-29 16:08:49 +03:00
engines fix: NoOpEngine engine_id → 'thru' to match sound_analysis_midi schema 2026-04-29 16:12:12 +03:00
ml feat(nisps/ml): MLP library with fixed-architecture template + spread-aware RL (meml-wmh) 2026-04-29 15:55:43 +03:00
modes feat(nisps/modes): scaffolding for platform-agnostic mode layer (meml-beb) 2026-04-29 16:26:33 +03:00
.gitignore feat: nisps/core foundation — perf, types, concepts, buffers, rng, math 2026-04-29 15:21:52 +03:00
CMakeLists.txt feat(nisps/engines): port firmware audio engines to AudioEngine concept (meml-1v6) 2026-04-29 16:09:12 +03:00