Back to Provenance

3353

.changelog/3353.md

3.3.11.5 KB
Original Source

Added

  • MIDI Peripheral SupportMIDIResponder protocol for emulator cores to receive/send MIDI messages (Note On/Off, CC, Program Change, Pitch Bend, Poly/Channel Aftertouch). System Common/Real-time (Clock, Start, Stop, Continue) and SysEx are defined as optional protocol methods but not yet dispatched by MIDIDeviceManager — will be implemented in a future PR. Modelled on the existing KeyboardResponder and MouseResponder patterns.
  • MIDISystemRegistry — Thread-safe, append-only registry seeded with systems historically known to have MIDI support (Atari ST, DOS, MSX, MSX2, PC-98, C64). Cores register dynamically at runtime; SystemIdentifier.supportsMIDI queries the registry.
  • MIDIDeviceManager — CoreMIDI singleton (iOS/macOS/Catalyst/visionOS, guarded with #if canImport(CoreMIDI)) that discovers connected MIDI devices, routes incoming UMP packets to the active MIDIResponder core, filters events by selected source, and exposes @Published TX/RX activity state for status lights.
  • MIDI Device Picker UI — SwiftUI section in the pause/retro menu (RetroMenuView+MIDIPicker.swift) showing input source and output destination pickers, live RX (green) / TX (orange) activity indicator lights, and an "Auto-detect input device" button that listens for the first incoming MIDI message to identify the device automatically.
  • PVEmulatorCore+MIDIsupportsMIDI / requiresMIDI properties forwarding to MIDIResponder on the bridge; attachMIDIResponder() / detachMIDIResponder() for lifecycle management.