Skip to content
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

MIDI 2.0 Support (MIDI-CI/UMP) #7

Open
6 of 10 tasks
orchetect opened this issue Jun 15, 2021 · 5 comments
Open
6 of 10 tasks

MIDI 2.0 Support (MIDI-CI/UMP) #7

orchetect opened this issue Jun 15, 2021 · 5 comments
Assignees
Labels
🎹 events MIDIKit Events 💡 new feature New feature request
Milestone

Comments

@orchetect
Copy link
Owner

orchetect commented Jun 15, 2021

MIDI 2.0 support progress:

  • Universal MIDI Packet (UMP) Events Support: added in 0.3.0
  • Additional MIDI 2.0 Events Support
    • Relative RPN/NRPN support (implement as a relative: Bool property on existing RPN/NRPN events)
    • Utility messages
    • Mixed Data Set Message (MIDI 2.0 Spec Chapter 4.6, Page 38-40 & 79)
    • Data 128 Bit UMPs (MIDI 2.0 Spec Appendix G, Page 79)

      "Does not translate to MIDI 1.0 Protocol, but may be used by a UMP MIDI 1.0 Device"

  • Extended abstractions (MIDI-CI Profiles, etc.) - may be a future post-1.0.0 feature, low priority
  • Unit tests
    • SysEx8 StreamID tests
  • Example project / Documentation
@orchetect orchetect added 💡 new feature New feature request 🎹 events MIDIKit Events labels Jun 15, 2021
@orchetect orchetect self-assigned this Jun 15, 2021
@orchetect
Copy link
Owner Author

orchetect commented Jun 15, 2021

API unification

There is a possibility that MIDI 1.0/2.0 events can be unified into a single paradigm in MIDIKit. This fits into the intention behind MIDI 2.0 as being an incremental set of enhancements that are available if both endpoints of a MIDI connection support MIDI 2.0, otherwise the protocol gracefully falls back to legacy MIDI 1.0 format.

This may take the form of a Note On event struct/enum that has pitch and velocity information that is in a format that can be seamlessly interpreted by the consumer of the library without much extra overhead to deal with conditional differences based on MIDI protocol.

Caveats

CoreMIDI recently had new methods and data structures added to handle basic MIDI-CI interop and UMP packets. The downside is that they come with minimum OS requirements: macOS 11.0, iOS 14. MIDIKit supports macOS 10.12+ and iOS 10+ and bumping minimum OS version requirements for MIDIKit is less than desirable.

It is possible to conditionally expose methods or handle implementation in MIDIKit on an @available basis if the minimum OS version requirement is met to use the new CoreMIDI API. MIDIKit would still be fully functional on older OS versions but the MIDI 2.0 features would only be available on newer OS versions that match the new CoreMIDI requirements.

Handling any MIDI 2.0 I/O or events in MIDIKit on older OS versions would require completely custom implementations.

@orchetect orchetect added this to the MIDI 2.0 Support milestone Jun 29, 2021
@orchetect orchetect added the ♻️ in progress Issue is actively being worked on label Jul 21, 2021
@orchetect orchetect changed the title MIDI 2.0 Support (MIDI-CI) 🎹 MIDI 2.0 Support (MIDI-CI/UMP) Jul 30, 2021
@orchetect
Copy link
Owner Author

orchetect commented Aug 12, 2021

Initial UMP support is in MIDIKit 0.1.15, on macOS Big Sur / iOS 14 or later, but is bypassed internally for the time being. All events are happening using MIDI 1.0 spec at this stage.

Still a WIP, some things are not implemented yet (multi-packet SysEx messages and a few other)

@orchetect
Copy link
Owner Author

orchetect commented Oct 7, 2021

Full UMP support will be WIP (blocked-in) in MIDIKit 0.2.0 but completed at a later date.

@orchetect orchetect removed the ♻️ in progress Issue is actively being worked on label Oct 7, 2021
@orchetect orchetect modified the milestones: Future, 0.3.0 Oct 7, 2021
@orchetect
Copy link
Owner Author

Most MIDI 2.0 UMP events are now supported.

UMP SysEx messages are not yet implemented, which will take more work because of its multi-part message formatting.

@orchetect
Copy link
Owner Author

UMP SysEx7 & SysEx8 support has now been added.

@orchetect orchetect modified the milestones: 0.3.0, 0.4.0 Jan 11, 2022
@orchetect orchetect pinned this issue Feb 27, 2022
@orchetect orchetect modified the milestones: 0.4.0, 0.5.0 Apr 22, 2022
@orchetect orchetect modified the milestones: 0.5.0, 0.6.0 Jun 25, 2022
@orchetect orchetect unpinned this issue Jan 16, 2023
@orchetect orchetect modified the milestones: 0.6.0, 0.8.0 Jan 20, 2023
@orchetect orchetect pinned this issue Jan 20, 2023
@orchetect orchetect modified the milestones: 0.8.0, 1.0.0 Jan 31, 2023
@orchetect orchetect unpinned this issue Oct 30, 2023
@orchetect orchetect changed the title 🎹 MIDI 2.0 Support (MIDI-CI/UMP) MIDI 2.0 Support (MIDI-CI/UMP) Dec 27, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
🎹 events MIDIKit Events 💡 new feature New feature request
Projects
None yet
Development

No branches or pull requests

1 participant