From 9231c10429305559f9edb61a6679155f28fa5fa4 Mon Sep 17 00:00:00 2001 From: joren Date: Mon, 6 Apr 2026 02:09:44 +0200 Subject: [PATCH] =?UTF-8?q?feat:=20MIDI=20controller=20mapping=20(per-prof?= =?UTF-8?q?ile=20CC=20=E2=86=92=20volume/mute)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Add MidiMapper class: pw_stream per MIDI source node, worker thread, learn mode via SSE named event - New endpoints: /api/midi-devices, /api/midi-mappings, /api/midi-learn/start/stop - Frontend: MidiMappingPanel with learn mode, per-profile storage - GraphEngine: support multiple onChange callbacks (addOnChange) Co-Authored-By: Claude Sonnet 4.6 --- CMakeLists.txt | 1 + frontend/src/components/GraphCanvas.svelte | 11 +- .../src/components/MidiMappingPanel.svelte | 408 ++++++++++++++++++ frontend/src/lib/stores.ts | 55 ++- frontend/src/lib/types.ts | 12 + frontend/src/lib/ws.ts | 20 +- src/graph_engine.cpp | 18 +- src/graph_engine.h | 7 +- src/midi_mapper.cpp | 336 +++++++++++++++ src/midi_mapper.h | 96 +++++ src/web_server.cpp | 152 ++++++- src/web_server.h | 3 + 12 files changed, 1105 insertions(+), 14 deletions(-) create mode 100644 frontend/src/components/MidiMappingPanel.svelte create mode 100644 src/midi_mapper.cpp create mode 100644 src/midi_mapper.h diff --git a/CMakeLists.txt b/CMakeLists.txt index a833595..8309bdf 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -15,6 +15,7 @@ add_executable(pwweb src/main.cpp src/graph_engine.cpp src/web_server.cpp + src/midi_mapper.cpp ) target_include_directories(pwweb PRIVATE diff --git a/frontend/src/components/GraphCanvas.svelte b/frontend/src/components/GraphCanvas.svelte index e450afa..93b5527 100644 --- a/frontend/src/components/GraphCanvas.svelte +++ b/frontend/src/components/GraphCanvas.svelte @@ -17,6 +17,7 @@ getQuantum, setQuantum, } from '../lib/stores'; import type { Node, Port, Link } from '../lib/types'; + import MidiMappingPanel from './MidiMappingPanel.svelte'; // Viewport let viewBox = $state({ x: -100, y: -40, w: 1200, h: 700 }); @@ -44,6 +45,7 @@ let showMergeDialog = $state(false); let showProfileDialog = $state(false); let showRuleDialog = $state(false); + let showMidiPanel = $state(false); let showVirtualMenu = $state(false); let splitNodes = $state(false); let showNetworkDialog = $state<{ type: string } | null>(null); @@ -481,8 +483,9 @@ - - + + +