Commit Graph

1488 Commits

Author SHA1 Message Date
shawn 120279cbd4 Add VU meter data, gate status, and compressor GR to mixer IPC protocol
- MixerEngine.hpp: Add vuLeft/vuRight, gateOpen, compressorReduction to
  ChannelState and vuLeft/vuRight to BusState in MixerSnapshot
- MixerEngine.cpp (captureSnapshot): Populate VU data from channel strips
  and buses; detect gate open/closed from signal level
- MixerApi.cpp (getStateJson): Serialize VU, gate, and compressor fields
  in the JSON state response

This enables the frontend MetersPage to display real-time VU meter bars,
gate open/closed indicators, and compressor gain reduction meters.
2026-06-23 20:09:52 -04:00
shawn 8068f5d168 Mixer engine: output routing, full state restore, MIDI learn API, PipeWire multi-channel support 2026-06-20 16:20:30 -04:00
shawn 01584f50da Initialize MixerEngine on startup (BB-6)
Add MixerEngine creation and wiring after model.Load() in main.cpp.
The mixer engine now gets created with current audio settings (sample rate,
buffer size from JackServerSettings), activated, and attached to the model.
This enables WebSocket mixer commands (mixerGetState, mixerAddChannel,
mixerAddBus, etc.) to work through /pipedal endpoint.

Missing initialization was the root cause of 'Invalid format' errors when
sending mixer commands via WebSocket.
2026-06-20 16:15:12 -04:00
shawn 5fd5946ff6 P4: MIDI control surface mapping — faders/buttons over USB MIDI
C++ backend (fully implemented):
- MidiMapper: CC processing, mapping table, JSON persistence, learn mode
- MidiLearnMode: 3-step learn workflow state machine
- MixerEngine::processMidiEvent() wired into AudioHost MIDI pipeline
- MixerApi + PiPedalSocket: all WS handlers (getMidiMappings,
  setMidiLearnMode, setMidiLearnTarget, commitMidiLearn, etc.)

React frontend (new):
- MidiMappingPanel: dialog with learn mode toggle, CC capture polling,
  commit workflow, current mappings list with delete, manual add
- MixerPage: MIDI button in toolbar, learn mode state management
- ChannelStrip + MasterBus: learn mode callbacks on fader/mute/solo touch
2026-06-20 16:14:12 -04:00
shawn 3d00299051 feat: add PipeWire multi-channel audio driver (full-duplex N channel)
- PipeWireDriver.hpp/cpp: new AudioDriver implementation using pw_filter API
- Full-duplex I/O via pw_filter (capture + playback in one RT callback)
- Dynamic channel count support (tested: 1-8 channels, extensible beyond)
- Uses SPA_AUDIO_FORMAT_F32 for zero-copy-compatible float processing
- Channel position mapping: MONO, stereo, 5.1, 7.1, plus Aux for N>8
- Follows the same buffer management pattern as AlsaDriverImpl
- Channel routing: main/aux input/output mapping with mix ops
- CLI flag: --driver pipewire|alsa (default: alsa)
- AudioHost: conditional driver selection based on driverType_
- PiPedalModel: stores and passes driver type to AudioHost
- CMakeLists.txt: added PipeWireDriver source files
2026-06-20 16:03:16 -04:00
shawn 524f02ec9d fix: resolve TS6133 unused-variable errors in MixerScenePanel files
- Removed unused Theme, DeleteIcon imports; fixed unused 'scenes' destructure
- Removed unused React default import and Restore icon import in subdir version
2026-06-20 16:00:33 -04:00
shawn e4e7cd1ca2 feat: add mixer scene API methods to PiPedalModel 2026-06-20 15:57:40 -04:00
shawn 0316e4b37f feat: add React mixer UI — MixerPage, ChannelStrip, MasterBus, useMixerWS hook
- useMixerWS: WebSocket hook connecting to ws://192.168.0.245:8080/ws
  with PiPedalSocket-compatible protocol (request/reply via replyTo)
  and auto-reconnect with exponential backoff.
- ChannelStrip: per-input channel control with volume fader, pan,
  mute, solo, and channel label/type display.
- MasterBus: master/subgroup/aux bus strip with volume fader and mute.
- MixerPage: full mixer console view with horizontal strip layout,
  real-time state polling (2s), and connection status indicator.
- AppThemed: added 'Mixer Console' drawer item + conditional rendering.

Build verified: tsc clean, vite build passes (1760 modules, 2.63s).
2026-06-20 15:56:17 -04:00
shawn 0a76f5734f Add scene save/load WS messages to MixerApi
- Implement saveScene: captures full mixer state via getStateJson(),
  stores in ~/op-pedal/default_config/scenes.json with auto-incrementing ID
- Implement loadScene: manual JSON walk to restore channel/bus state
  from saved scene JSON, routes skipped for safety
- Implement listScenes: returns JSON array of {id, name}
- Implement deleteScene: remove by ID from scenes file
- Add WS handlers: mixerSaveScene, mixerLoadScene, mixerGetScenes
  registered in PiPedalSocket.cpp message dispatcher
- Uses project's JSON_MAP/raw_json_string for file persistence
- Compiles cleanly against existing build
2026-06-20 15:54:42 -04:00
shawn 959da00d7c docs: add band-in-a-box digital mixer implementation plan 2026-06-20 15:11:14 -04:00
shawn 1854d03c58 feat: add WebsSocket API for mixer engine control
New files:
- MixerApi.hpp/cpp: Model-level API bridging WebSocket messages to
  MixerEngine control (channel volume/pan/mute/solo/hpf, bus control,
  routing, state queries)
- 15 new WebSocket message handlers in PiPedalSocket.cpp for full
  mixer control surface

Integration:
- MixerEngine member added to PiPedalModel with Get/Set accessors
- SetMixerEngine propagates to AudioHost rt processing pipeline
- Socket handler auto-wires MixerEngine to MixerApi on connect

Messages implemented:
  mixerSetChannelVolume, mixerSetChannelPan, mixerSetChannelMute,
  mixerSetChannelSolo, mixerSetChannelLabel, mixerSetChannelHpf,
  mixerGetState, mixerAddChannel, mixerRemoveChannel,
  mixerSetBusVolume, mixerSetBusMute, mixerAddBus, mixerRemoveBus,
  mixerRouteChannelToBus
2026-06-20 14:15:37 -04:00
shawn 0422c91b4e feat: integrate MixerEngine into AudioHost real-time audio pipeline
When SetMixerEngine() is called with a MixerEngine instance, the
audio processing thread routes all device input/output channels
through the mixer (channel strips → buses → master) instead of
the legacy Lv2Pedalboard. Falls back when no mixer engine is set.

- Thread-safe via mutex + realtime raw pointer swap (same pattern
  as existing SetPedalboard)
- Preserves existing pedalboard processing — both modes coexist
- New ProcessLv2Pedalboard() path when realtimeActiveMixerEngine
  is non-null uses device buffers directly for multi-channel I/O
2026-06-20 14:06:46 -04:00
shawn df5a317ceb feat: add MixerEngine core — ChannelStrip, MixerBus, and MixerEngine for band-in-a-box digital mixer
MixerEngine architecture:
- MixerChannelStrip: per-input FX chain (Lv2Pedalboard reuse),
  volume, pan, mute, solo, HPF, aux sends, VU metering
- MixerBus: accumulation bus with volume, mute, VU. Supports
  master, subgroup, aux, and FX-return bus types
- MixerEngine: orchestrator managing channel→bus routing graph,
  bus→bus routing, solo override, and the full real-time audio
  processing cycle

All new code compiles cleanly with the existing C++20 build and
follows the existing PiPedal codebase conventions (namespaces,
error handling, buffer patterns). CPU-efficient real-time thread
processing with atomic control surface interaction.
2026-06-20 13:57:15 -04:00
shawn e1014462b4 fix: Restore missing P in OP LABS — path was truncated, only had O letter
CMake / build (push) Has been cancelled
CodeQL / Analyze (cpp) (push) Has been cancelled
2026-06-20 13:24:59 -04:00
shawn 4854b2fa22 fix: Working OP-Pedal logo SVGs with Arial/sans-serif text + PNG previews
CMake / build (push) Has been cancelled
CodeQL / Analyze (cpp) (push) Has been cancelled
2026-06-20 13:10:03 -04:00
shawn 4047a74dd5 fix: Revise OP-Pedal logos - OP LABS + OP PEDAL subtitle with per-letter spacing
CMake / build (push) Has been cancelled
CodeQL / Analyze (cpp) (push) Has been cancelled
2026-06-20 12:09:17 -04:00
shawn 236e1e2b3c feat: Add OP-Pedal branded logo variants (horizontal + square stack)
CMake / build (push) Has been cancelled
CodeQL / Analyze (cpp) (push) Has been cancelled
- Horizontal lockup: OP Labs icon + 'OP' (silver) + 'PEDAL' (blue)
- Square stack: icon above 'OP PEDAL' text
- Place in artifacts/ and vite/public/img/ for UI use
2026-06-20 12:05:29 -04:00
shawn ae13b3739d feat: Add OP Labs branding — favicon, PWA icons, manifest, UI logo
CMake / build (push) Has been cancelled
CodeQL / Analyze (cpp) (push) Has been cancelled
- OP Labs icon SVG as default app icon + favicon (SVG + ICO fallback)
- 192x192 and 512x512 PWA icons generated from OP Labs logo
- Updated manifest.json with SVG favicon + maskable icon support
- Updated index.html with SVG favicon link
- Replaced old ic_logo.svg with OP Labs icon mark
- Stored OP Labs logo assets (icon, horizontal, square) in artifacts/
- Removed old PiPedal20Thumb.jpg
2026-06-20 12:03:42 -04:00
shawn c028ad8cd6 fix: Rebrand systemd templates, polkit rules, and install scripts
CMake / build (push) Has been cancelled
CodeQL / Analyze (cpp) (push) Has been cancelled
- src/templates/pipedald.service.template — user/group pipedal_d → oppedal_d
- src/templates/pipedaladmind.service.template — WorkingDirectory /var/pipedal → /var/oppedal
- src/templates/pipedal_nm_p2pd.service.template — Description and WorkingDirectory
- src/templates/pipedal_p2pd.service.template — Description and WorkingDirectory
- src/templates/pipedal_p2pd.conf.template — p2p_model_name, manufacturer
- src/templates/jack.service.template — After=pipedald → After=oppedald
- src/templates/*.conf — PiPedal/pipedal-* → OP-Pedal/oppedal-* references
- src/polkit-1/rules/10-pipedal-networkmanager.rules — group pipedal_d → oppedal_d
- install.sh — pipedalconfig/oppedalconfig binary paths
- uninstall.sh — /etc/pipedal, /var/pipedal → /etc/oppedal, /var/oppedal
- run.sh — pipedald → oppedald, /etc/pipedal → /etc/oppedal
2026-06-20 12:02:39 -04:00
shawn 5e93cc1fb9 fix: Update system-level branding in PiPedalCommon (hotspot/ALSA names, service group, device name)
CMake / build (push) Has been cancelled
CodeQL / Analyze (cpp) (push) Has been cancelled
- WifiConfigSettings.hpp: default hotspot 'pipedal' -> 'op-pedal'
- WifiDirectConfigSettings.hpp: default hotspot 'pipedal' -> 'op-pedal'
- WifiDirectConfigSettings.cpp: default device name 'PiPedal' -> 'OP-Pedal'
- ServiceConfiguration.hpp: deviceName 'PiPedal' -> 'OP-Pedal'
- ServiceConfiguration.cpp: group name 'pipedal_d' -> 'oppedal_d'
- AlsaSequencer.cpp: ALSA client/port/queue names 'PiPedal' -> 'OP-Pedal' (5 occurrences)
2026-06-20 12:01:56 -04:00
shawn acfb8d15ab fix: Rebrand project from PiPedal to OP-Pedal
CMake / build (push) Has been cancelled
CodeQL / Analyze (cpp) (push) Has been cancelled
Updated branding across the project:
- CMakeLists.txt: project name, description, homepage, display version
- src/PiPedalVersion.cpp: server name string
- debian/control: package name, source, homepage, description
- vite/package.json: package name
- vite/index.html: title, meta description
- vite/public/manifest.json: name, short_name, description, URLs
- UI files: AboutDialog, AppThemed, MainPage, SettingsDialog,
  UpdateDialog, WifiConfigDialog, WifiConfigSettings,
  WifiDirectConfigSettings, Tone3000Downloader, Tone3000HelpDialog,
  WindowScale

Preserved upstream copyright/attribution and legal references.
2026-06-20 11:04:28 -04:00
shawn d01a7df03a chore: rebrand as OP-Pedal fork of PiPedal v2.0.107
CMake / build (push) Has been cancelled
CodeQL / Analyze (cpp) (push) Has been cancelled
2026-06-20 10:56:19 -04:00
Robin Davies 0db76000d4 Bad link in README.md
Signed-off-by: Robin Davies <rerdavies@gmail.com>
2026-06-18 09:28:15 -04:00
Robin Davies a552fb34f3 Merge pull request #516 from rerdavies/dev
v2.0.107 Dev Merge
2026-06-18 09:23:09 -04:00
Robin E.R. Davies d75a52bdac RE-add esbuild 2026-06-18 08:30:36 -04:00
Robin E.R. Davies b8cec3e1e8 Merge branch 'dev' of https://github.com/rerdavies/pipedal into dev 2026-06-18 08:18:51 -04:00
Robin E.R. Davies e71594000a Referesh vite dependencies in Prod build. 2026-06-18 08:18:48 -04:00
Robin E. R. Davies 5b644fe74c Merge branch 'dev' of https://github.com/rerdavies/pipedal into dev 2026-06-18 08:17:23 -04:00
Robin E. R. Davies 1cd9105f9a ToobAmp v1.3.82 aarch64 2026-06-18 08:16:40 -04:00
Robin E.R. Davies 3539ebcef3 Merge branch 'main' of https://github.com/rerdavies/pipedal into dev 2026-06-18 08:06:07 -04:00
Robin E.R. Davies 11a5c3e174 v2.0.107 2026-06-18 08:04:55 -04:00
Robin E.R. Davies a6a620ad55 Merge branch 'main' of https://github.com/rerdavies/pipedal 2026-06-18 07:58:36 -04:00
Robin E.R. Davies 52e7ea8ad0 ToobAmp v1.3.82 amd64 2026-06-18 07:58:32 -04:00
Robin Davies 7d611709b5 Update ReleaseNotes with contributor information
Added contributor names for minor features.

Signed-off-by: Robin Davies <rerdavies@gmail.com>
2026-06-17 14:18:18 -04:00
Robin E.R. Davies 4522200b3b Merge branch 'dev' of https://github.com/rerdavies/pipedal 2026-06-17 14:11:24 -04:00
Robin E. R. Davies 321fc792bb Release notes. 2026-06-17 12:38:40 -04:00
Robin E. R. Davies 8917889406 Correct release note credits. 2026-06-17 12:28:07 -04:00
Robin E.R. Davies e5fd55d505 Build fixes, promot Arch Linux build to alpha status. 2026-06-17 12:24:06 -04:00
Robin E.R. Davies d6ee400394 Must not install .so's from build dependencies. We should be using .a files instead. 2026-06-17 12:12:46 -04:00
Robin E.R. Davies 8bc43e76fd ToobAmp 1.3.81 amd64 2026-06-17 11:55:08 -04:00
Robin E.R. Davies ef28f2684d Do NOT install LIBZIP files. (we use the .a file) 2026-06-17 11:53:12 -04:00
Robin E. R. Davies 78bc3d1d1a Promote 2.0.106 to a release build. 2026-06-17 11:46:14 -04:00
Robin E.R. Davies 7e7f6d926c Include SQLLite build in ALL target. 2026-06-17 11:24:53 -04:00
Robin E.R. Davies 81395a66a4 Remove zlib and sqllite install dependencies. (use static libs) 2026-06-17 11:22:32 -04:00
Robin E. R. Davies f6bff2a682 Merge branch 'dev' of https://github.com/rerdavies/pipedal into dev 2026-06-17 10:36:05 -04:00
Robin E. R. Davies 859500a8ac Fix Catch2 build break on Debian 12 2026-06-17 10:35:57 -04:00
Robin Davies a752eac22c Merge pull request #508 from rerdavies/dependabot/npm_and_yarn/vite/npm_and_yarn-30ae9b537b
Bump esbuild from 0.25.2 to removed in /vite in the npm_and_yarn group across 1 directory
2026-06-17 09:37:22 -04:00
Robin Davies 56be988646 Merge pull request #511 from onirob/fix-alsa-midi-freeze
Fix MIDI input freeze under continuous CC input
2026-06-17 09:36:11 -04:00
Roberto Figliè 2703bfc221 Fix for midi freeze
Reset midiEventMemoryIndex in AlsaDriver.cpp when starting MIDI processing and when clearing midiEventCount to avoid stale index/state issues while using expression pedals.
2026-06-17 12:01:26 +02:00
Robin E. R. Davies f836ed5f98 TooBAmp 1.3.81 aarch64 2026-06-16 16:42:26 -04:00