Skip to content

Releases: wamdam/raspimidihub

v2.0.7

21 Apr 11:20

Choose a tag to compare

Added

  • WiFi channel auto-survey on AP start: briefly scans the 2.4 GHz band via iwlist and 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.js now does a real pass-through with a 503 fallback. Manifest also gained id, scope, description, orientation, and explicit purpose: "any" on icons.

v2.0.6

19 Apr 19:38

Choose a tag to compare

Added

  • Arpeggiator: slow rates + triplets. 4/1, 4/1T, 2/1, 2/1T, 1/1, 1/1T, 1/2, 1/2T on top of the existing 1/41/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, so ch9,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

19 Apr 10:09

Choose a tag to compare

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 NoteSelect wheel — 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_connect treated 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

15 Apr 19:24

Choose a tag to compare

Changed

  • Removed global clock/transport bridge. Clock now flows only through explicit matrix connections (use per-connection Clock/RT filter toggle).

v2.0.3

13 Apr 18:55

Choose a tag to compare

Fixed

  • rosetup: install now works on fresh Pi OS Trixie (64-bit). Detection uses /sys/firmware/devicetree/base/model, setup remounts /boot/firmware rw as needed.

v2.0.2

12 Apr 12:34

Choose a tag to compare

Fixed

  • Swipe-dismiss no longer triggers when interacting with wheels/faders in panels
  • Update checker crash on Pi (unused packaging module import)
  • LED no longer flickers constantly on MIDI clock — gentle heartbeat per beat instead

v2.0.1

11 Apr 21:44

Choose a tag to compare

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

11 Apr 14:35

Choose a tag to compare

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

11 Apr 11:32

Choose a tag to compare

v2.0.0-alpha3 Pre-release
Pre-release

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

10 Apr 22:47

Choose a tag to compare

v2.0.0-alpha2 Pre-release
Pre-release

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)