MIDIKit

🎹 Modern multi-platform Swift CoreMIDI wrapper with MIDI 2.0 support.

MIT License

Stars
189
Committers
2

Bot releases are visible (Hide)

MIDIKit - 0.3.1

Published by orchetect over 2 years ago

  • Fixed an issue where legacy Core MIDI API may have been used by default
  • Exposed Core MIDI port ref properties as public
  • MIDI.Event description string channel and group are now formatted as hexadecimal
  • MIDIEventLogger example project improvements
  • Minor bugfixes
  • Unit tests updated and expanded
  • Minor API changes
MIDIKit - 0.3.0

Published by orchetect almost 3 years ago

Major Milestone Release

  • Essential MIDI 2.0 / Universal MIDI Packet support
  • MIDIKit is now pure Swift

Changes and Additions

  • MIDI.IO.Manager now uses the new Core MIDI API and MIDI 2.0 Protocol by default if available
  • MDI 2.0: Multi-part SysEx7 and SysEx8 UMP messages can now be sent and received
  • SysEx refactors and API changes
    • .sysEx has now become .sysEx7
    • .universalSysEx has now become .universalSysEx7
    • .sysEx8 and .universalSysEx8 have been added
  • ReceiveHandlers now do not call handlers if parsed events are empty
  • ReceiveHandlers: EventsLogging and RawDataLogging now ignore empty parsed events
  • Unit tests updated
MIDIKit - 0.2.9

Published by orchetect almost 3 years ago

What's New

  • Most MIDI 2.0 UMP events are functional, with the notable exception of SysEx messages which require further work.
  • Updated MIDIEventLogger example project
  • Inline documentation improvements

Syntax

  • MIDI.IO.Manager: coreMIDIClientRef is now public
  • Device, Entity, *Endpoint, AnyMIDIIOObject: coreMIDIObjectRef is now public
MIDIKit - 0.2.8

Published by orchetect almost 3 years ago

  • MIDI.Note.Name: Added .name and .octave properties
  • NoteRange is now NoteNumberRange, new NoteRange is ClosedRange<MIDI.Note>
  • Renamed MIDI.Note.pianoKey to .isSharp, also added to MIDI.Note.Name
MIDIKit - 0.2.7

Published by orchetect almost 3 years ago

  • Added MIDI.NoteRange and MIDI.Note .pianoKey property
  • MIDI.Note.Name improvements
MIDIKit - 0.2.6

Published by orchetect almost 3 years ago

  • Fixed Note.On Equatable behavior
  • Added translateMIDI1NoteOnZeroVelocityToNoteOff flag to ReceiveHandler.Events
  • Improved unit tests
MIDIKit - 0.2.5

Published by orchetect almost 3 years ago

  • Fixed MIDI.Byte.Pair.uInt16Value returning incorrect value
  • Fixed possible overflow in UInt32(bipolarUnitInterval:) init from Float
  • MIDI.UInt7.Pair: Added .uInt14Value property
  • Added unit tests
MIDIKit - 0.2.4

Published by orchetect almost 3 years ago

  • Added public inits to all MIDI.Event.* concrete types
  • Made MIDI.Event.sysEx(rawBytes:group:) public access level
  • SysEx/UniversalSysEx: Added leading/trailing F0/F7 overloads for midi1RawBytes()
MIDIKit - 0.2.3

Published by orchetect almost 3 years ago

  • MIDI1Parser: Added translateNoteOnZeroVelocityToNoteOff flag
  • MIDI.Event.Note.On: Added midi1ZeroVelocityAsNoteOff flag
MIDIKit - 0.2.2

Published by orchetect almost 3 years ago

  • Added MIDI.Note struct represent abstract MIDI note, constructing and converting between
    • note number
    • note name string (such as "C3", "A#4")
    • note name & octave (such as name: .C, octave: 3)
    • frequency in Hz
MIDIKit - 0.2.1

Published by orchetect about 3 years ago

  • Renamed @AtomicAccess to @Atomic with improvements
    • This property wrapper is not used in MIDIKit, but it is used in MIDIKit extensions such as MIDIKitSync
MIDIKit - 0.2.0

Published by orchetect about 3 years ago

Initial release.

macOS 10.12 High Sierra - 12.0 Monterey
iOS 10 - 15

  • Stable, thread-safe MIDI I/O
  • Full MIDI 1.0 support, with MIDI 2.0 coming in a future update
  • Central MIDI port/connection manager
  • Rich MIDI event types and value types
  • Simple and powerful MIDI event filters
  • Unit tested
  • Production tested in wide-release commercial software

Known Issues:

  • MIDI 2.0 implementation on supported OS versions is still in active development and will be available in a future MIDIKit update. For the time being, MIDIKit will internally default to MIDI 1.0 which is fully operational.
  • Back-porting a limited subset of MIDI 2.0 features to older platforms (macOS Catalina or older, and iOS 13 or older) is planned, but not yet supported.
  • Beta support for tvOS 14+ and watchOS 7+ in development and is planned to be added in future.
MIDIKit - 0.1.19

Published by orchetect about 3 years ago

  • Stability improvements
MIDIKit - 0.1.18

Published by orchetect about 3 years ago

  • Stable and tested on macOS 10.15.7 and 11.5.2 using legacy Core MIDI API (defaulted)
MIDIKit - 0.1.17

Published by orchetect about 3 years ago

  • Defaulting to legacy Core MIDI API which is more stable in the interim until bugs in Core MIDI's new API are fixed or can be worked around
  • Fixed phantom threading issues with MIDI packet list pointers
MIDIKit - 0.1.16

Published by orchetect about 3 years ago

  • Added workaround to fix edge-case crashes on Big Sur where large/malformed packets are received.
    (This very well points toward an internal crash/bug in CoreMIDI)
  • Fixed undefined behavior calling MIDIPacketNext/MIDIEventPacketNext one too many times
MIDIKit - 0.1.15

Published by orchetect about 3 years ago

  • New MIDIEventLogger example project
  • Initial Universal MIDI Packet (UMP) support
  • Refactored and improved MIDI events filter methods
  • Added name property to MIDI.Event.CC and all children
  • Fixed crashes on macOS Big Sur
  • Various bug fixes and improvements
MIDIKit - 0.1.14

Published by orchetect about 3 years ago

  • Fixed crash on macOS Big Sur and above
MIDIKit - 0.1.13

Published by orchetect about 3 years ago

  • Update Package file
MIDIKit - 0.1.12

Published by orchetect about 3 years ago

C target formatting

Package Rankings
Top 17.85% on Swiftpackageindex.com
Badges
Extracted from project README
Xcode 14-16 License: MIT