-
Notifications
You must be signed in to change notification settings - Fork 1
gmcp midi #21
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Contributor
daiverd
commented
Aug 26, 2025
- feat: Add MIDI service and GMCP client package
- feat: Add JZZ and JZZ-synth-tiny
- feat: allow gmcp packages to enable or disable themselves
- fix: prevent MIDI activeNotes timeout collisions across channels
- feat: Add MIDI device persistence to preferences
- feat: Replace Web MIDI API with JZZ.js for enhanced device management
- feat: Enhance MIDI UI with auto-reconnection and device monitoring
- feat: Restore virtual MIDI synthesizer initialization
- Add MidiService for managing MIDI devices and playback - Add GMCPClientMidi for handling GMCP MIDI messages - Add MidiStatus component for device selection and management - Shows available MIDI outputs and current connection status - Allows users to select and connect to MIDI devices - Add MIDI tab to preferences dialog - Allow users to enable/disable MIDI functionality - Register MIDI GMCP package in App.tsx - Add MIDI all-notes-off to Escape key handler - Add MIDI tab to sidebar when enabled in preferences - Handle GMCP MIDI support advertisement based on user preferences
Add jzz and jzz-synth-tiny packages to enable virtual MIDI synthesizer functionality using Web Audio API. Add VirtualMidiService class that wraps JZZ-synth-tiny functionality: - Registers "Virtual Synthesizer" as available MIDI output device Update MidiService to support virtual synthesizer: - Add virtual synthesizer to getOutputDevices() list
Add enabled property to GMCPPackage base class: - Add enabled getter to base GMCPPackage (defaults to true) - Override enabled in GMCPClientMidi to check preferences - Update Core.Supports.sendSet() to filter by enabled packages - Change MIDI packageVersion from undefined to 1 - MIDI included in initial Core.Supports.Set when enabled in preferences, disabled when checkbox is unchecked in preferences - Any future package can easily implement conditional inclusion in core.supports
Fix memory leak in GMCPClientMidi where activeNotes Map used only note
numbers as keys, causing timeout conflicts when same notes played on
different MIDI channels. Now uses composite "${note}_${channel}" keys
to ensure proper timeout isolation and cleanup.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Add lastInputDeviceId and lastOutputDeviceId to MidiPreferences - Enable auto-reconnection to previously used devices on app restart 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
- Replace navigator.requestMIDIAccess with JZZ() for better cross-platform support - Add comprehensive device change detection with onChange() event handling - Implement connection state tracking and auto-reconnection logic - Add device persistence with preferences integration - Enhance virtual synthesizer initialization with proper JZZ refresh - Support both hardware and virtual MIDI devices consistently - Add methods for device enumeration, reconnection, and cleanup Key improvements: - Real-time device connect/disconnect detection - Auto-reconnection to last used devices on startup - Better error handling and connection state management - Unified device management through JZZ.js 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
- Add real-time connection state display with visual indicators - Implement auto-reconnection for previously used devices - Show reconnection suggestions when last-used devices become available - Add device connection events display with timestamps - Enhance device refresh functionality with virtual synthesizer support - Add comprehensive error handling for connection attempts - Poll connection state to catch auto-reconnections and device changes - Improve user feedback with connection status and event logging UI improvements: - Visual connection status (✓ Connected device names) - Blue/green reconnection suggestion boxes - Device connection events timeline - Enhanced refresh button with full initialization - Real-time device list updates 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
- Restore virtual synthesizer initialization in App component - Maintain compatibility with existing virtual MIDI functionality - Ensure virtual synthesizer appears in device list on startup 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.