Releases: wamdam/raspimidihub
Releases · wamdam/raspimidihub
v2.0.7
Added
- WiFi channel auto-survey on AP start: briefly scans the 2.4 GHz band via
iwlistand picks the least-busy of {1, 6, 11} instead of the hardcoded 7. Weighs each detected AP's signal with a ±2-channel bleed; falls back to 11 on scan failure. Clears up stuck associations in noisy environments.
Fixed
- Saved connections for hot-plugged devices weren't restored. Hotplug re-scans replayed only the live-state snapshot and ignored
config.connections, so re-plugging a USB device left its saved routing gone while its disabled cells correctly reappeared (disabled state is always re-read). The engine now tracks which stable IDs were present before each rescan and merges matching saved connections for newly-appeared devices — unless the pair is explicitly disabled in config. User edits that hadn't been saved yet are still respected. - PWA install prompt missing. Recent Chromium requires the service worker to actually handle fetches; an empty listener no longer qualifies.
sw.jsnow does a real pass-through with a 503 fallback. Manifest also gainedid,scope,description,orientation, and explicitpurpose: "any"on icons.
v2.0.6
Added
- Arpeggiator: slow rates + triplets.
4/1, 4/1T, 2/1, 2/1T, 1/1, 1/1T, 1/2, 1/2Ton top of the existing1/4…1/32(each with its triplet variant). Rates are ordered by length in the rate picker so the list reads slow → fast. Works in Free, Tempo, and Transport sync modes.
Fixed
- Mapping fan-out was rejected as "duplicate". CC→CC and Note→CC duplicate detection ignored
dst_channel, soch9,cc1 → ch1,cc10+ch9,cc1 → ch2,cc10(same src, fan-out to a different destination channel) got refused. Same-src-same-dst mappings with non-identity scaling were also wrongly marked pointless. Rules now:- Reject exact all-fields-identical duplicates only.
- Reject a CC→CC with same src/dst and identity 0..127 → 0..127 scaling.
- Reject a channel-map with
src_channel == dst_channel. - Allow every fan-out (different dst channel, different dst CC) and same-src-dst variants with different scaling curves (value-shaper use case).
Logic extracted into validate_new_mapping and covered by a 30-row parametrized matrix.
v2.0.5
Added
- Hold plugin: latch notes without a sustain pedal. Press any combination of keys, lift your fingers, and the chord sustains. While at least one key is still held, new presses add to the chord. Once all keys are released, press the configured release-note (silent — just releases) or any other note to replace the previous chord. Releases on MIDI Stop.
- Panic button (red, bottom of the matrix page): sends CC 123 / CC 120 on every channel to every outbound destination and calls
plugin.panic()on every instance so stateful plugins release their internal note tracking. - MIDI Learn button under every
NoteSelectwheel — tap it and the next note you play sets the value. - Channel-remap fan-out: a single incoming channel can be layered to multiple destination channels (e.g. bass ch 1 + strings ch 6) by adding one channel-map mapping per target.
- Plugin
panic()hook (default no-op; implemented on Hold, Arpeggiator, Chord Generator, MIDI Delay). - Transport Start/Stop now reach every plugin, not just clock-tick subscribers.
Fixed
- Saved config was not loaded at boot when running headless —
_scan_and_connecttreated an empty live-state snapshot as "nothing to apply" instead of falling back to the saved connections. - Plugin-referencing connections (hw↔plugin, plugin↔plugin) were dropped at boot because the initial scan ran before plugins were restored; scan now runs after plugin restore.
- Hold got wedged in a stuck state if you changed
release_note(via wheel or Learn) to a note that was already tracked — the paired note-off was swallowed and the plugin could never reach LOCKED again.
v2.0.4
v2.0.3
v2.0.2
v2.0.1
Added
- Global clock/transport bridge: MIDI clock and transport forwarded to all devices automatically, with loop prevention
Changed
- Hotplug preserves live state (filters, mappings) without needing Save Config
- Plugins start unconnected — route them manually
- Duplicate USB devices (same VID:PID) can be renamed independently
Fixed
- install.sh handles missing rosetup deb gracefully
- Update checker no longer crashes on missing 'packaging' module
v2.0.0
v2.0.0 — Virtual Instruments + Plugin System
Plugin System
- 12 built-in plugins that appear as MIDI devices in the routing matrix
- Arpeggiator with step sequencer, accents, and transport sync
- CC LFO with live oscilloscope display
- CC Smoother with dual input/output scopes
- Chord Generator, Master Clock, MIDI Delay, Note Splitter, Note Transpose, Panic Button, Scale Remapper, Velocity Curve, Velocity Equalizer
- Declarative UI: Wheel, Fader, Radio, Toggle, StepEditor, CurveEditor, Button, NoteSelect, ChannelSelect, oscilloscope/meter displays
- CC automation: hardware CCs control plugin params with live UI animation
- Clock bus with transport sync (Start/Stop/Continue)
- Plugin sandbox with import validation and callback watchdog
- Plugin developer guide with icon and help text conventions
UI
- 3-tab navigation: Routing, Presets, Settings
- Routing matrix with plugin icons, DIN icons, rate meters, Add button
- Multitouch piano keyboard with horizontal scroll
- Mixer-style fader with value on thumb
- Mapping form with wheels/faders instead of dropdowns
- PWA install for fullscreen standalone mode
- Presets include plugin instances
Performance
- Global CC coalescing prevents MIDI bus flooding
- Per-plugin output rate limiting (1000 events/sec)
- Clock timing via pipe wake-up for sub-millisecond response
- Circular buffer MIDI delay (no thread explosion)
Bug Fixes
- ALSA event type constants corrected (Start=30, Stop=32)
- Filter engine per-connection write ports prevent event leaking
- SSE drain timeout prevents stuck connections
- Direct MIDI addressing from test sender
v2.0.0-alpha3
v2.0.0-alpha3 — Clock timing + plugin chain fixes
Clock Timing
- Clock ticks queued to plugin threads via pipe wake-up — instant response,
no 2ms polling delay, doesn't block the web server's asyncio loop - ALSA events processed before ticks: upstream notes/chords are ingested
before the arp advances, fixing dropped notes in chains
Plugin Fixes
- MIDI Delay rewritten with circular buffer (no thread explosion on sync)
- Repeats wheel replaces Feedback % fader
- Plugin ALSA output rate limited to 1000 events/sec
- Master Clock sends real MIDI clock with Start/Stop/Pause transport
- Note Splitter: per-zone transpose (+-48 semitones)
- Scale Remapper: root note shows C/C#/D/... labels
- Removed: Channel Router, Monitor, Sync Offset (redundant or impractical)
UI
- Plugin help text (? button) with descriptions and examples
- Oscilloscope display for CC LFO and CC Smoother
- Fader display_factor (shows Hz on thumb)
- Wheel labels (custom text instead of numbers)
- Disable Reboot during upgrades
- Sort plugins before hardware in matrix and devices list
- Add button in routing matrix
- Implementation plan updated with status and TODO
Docs
- Complete README rewrite with inline screenshots
- UI Guide with screenshots in every section
- Changelog for all alpha changes
- Plugin developer guide updated
v2.0.0-alpha2
v2.0.0-alpha2 — Virtual Instruments + Plugin System
Alpha release on the feature/virtual-instruments branch. Not merged to main yet.
Plugin System
- Complete plugin framework: threaded isolation, ALSA ports, clock bus, crash recovery
- 12 built-in plugins: Arpeggiator, CC LFO, CC Smoother, Chord Generator, Master Clock, MIDI Delay, Note Splitter, Note Transpose, Panic Button, Scale Remapper, Velocity Curve, Velocity Equalizer
- Declarative UI: plugins declare params, framework renders Wheels, Faders, Radios, Toggles, CurveEditor, Oscilloscope
- CC automation: hardware CCs control plugin params in real-time
- Clock bus: 24 PPQ with musical divisions, auto-start on first tick
- Plugin display outputs: live oscilloscope and meter displays
- Per-plugin icon.svg convention with turquoise rendering
- Help text with ? button in config panel
UI
- Devices tab replaces Status tab — unified USB + virtual device list
- Plugin config panels with interactive controls (haptic feedback on mobile)
- Scrollable multi-octave piano keyboard with multitouch
- Mixer-style fader with value on thumb, CC coalescing
- Mapping form uses Wheels/Faders/Radio/Toggle instead of dropdowns
- MIDI rate meters on routing matrix (DIN MIDI bandwidth indicator)
- Device icons in matrix (DIN connector for hardware, plugin SVG for virtual)
- PWA install support (fullscreen standalone mode)
- Presets include plugin instances and settings
Performance
- Global CC coalescing prevents MIDI bus flooding
- Plugin output rate limited to 1000 events/sec
- SSE drain timeout prevents stuck connections
- MIDI Delay uses circular buffer (no thread explosion)
Bug Fixes
- Filter engine per-connection write ports (no event leaking)
- Clock bus auto-start, monitor-port-only counting
- Direct MIDI addressing (no broadcast from test sender)
- Hanging notes fix (stable refs in piano touch handlers)