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.7.1

Published by orchetect almost 2 years ago

Improvements for Receiving MIDI Events

  • Added a new .eventsWithMetadata { } MIDI event receive handler that includes MIDI packet timestamp and the source endpoint

Improvements for Object Properties

  • MIDI endpoints, entities and devices now have unified property names
  • MIDI endpoints, entities and devices have additional contextual properties (ie: endpoints offer an entity and device property)
  • MIDI event filters are now more robust
MIDIKit - 0.7.0

Published by orchetect about 2 years ago

What's New

HUI

  • HUI objects and value types have been substantially refactored and improved, and various issues resolved. (#136 / #139)
  • A new HUIHost object is now available for HUI host applications to manage one or more HUIHostBank remote HUI devices. (#136 / #139)

Examples

  • Bluetooth MIDI example projects have been updated to demonstrate configuring your iOS app as a local Bluetooth MIDI peripheral which other devices can connect to. (#141 / #142)
  • HUITest example application now demonstrates a simple HUI host and the HUI surface UI has been improved with functioning faders, V-Pots and jog wheel. (#139)
MIDIKit - 0.6.1

Published by orchetect about 2 years ago

  • Resolved: Under certain conditions when building or archiving a release build, the Swift compiler was throwing build errors related to synthesizing protocol conformance. The issue should now be resolved.
MIDIKit - 0.6.0

Published by orchetect about 2 years ago

MIDIKit 0.6.0

What's New

  • Library-wide API clarification and more consolidated type names.

  • Curated documentation:

    • Written with DocC

    • Includes all the getting started guides previously found in the Wiki and more

    • Easy to navigate directly within Xcode using the Build Documentation menu command, or browsable online

      (Note: Xcode 14 builds docc more reliably than Xcode 13 but you can always browse the online docs)

  • MIDIKit is now a mono-repo: All extension repos (SMF, Sync, ControlSurfaces) are now incorporated as package products within MIDIKit, and the external repos are now deprecated. All of MIDIKit can be imported with a single import, or individual targets can be imported if only certain functionality is required. See the documentation for details.

  • Refactors and improvements

Note: MIDIKit 0.6.0 contains substantial API changes from 0.5.x, and now requires Swift 5.5 / Xcode 13.0+.

MIDIKit - 0.5.2

Published by orchetect about 2 years ago

New Features

  • MIDI.Event.sysEx7(rawHexString:) static initializer
    • capable of parsing a string of hex byte values (ie: "F7 01 02 03 F0" or "f7010203f0")
  • MIDI.Event.SysEx7 instance: Added .midi1RawHexString() method
    • returns the raw message bytes as a string of hex values

Minor Changes

  • MIDI.Event.noteManagement(): Added note: parameter label for consistency
MIDIKit - 0.5.1

Published by orchetect over 2 years ago

  • Added MIDI 2.0 utility messages
  • MIDI.Byte.Pair: Added UInt16 interop
  • Enabled build & test on tvOS and watchOS (#124)
  • Updated examples and unit tests for API changes
MIDIKit - 0.5.0

Published by orchetect over 2 years ago

Incremental API Changes

Some API changes and namespace adjustments have been made to improve logical organization in the library. Also, some quality-of-life improvements come from simplified unique ID handling.

  • MIDI.IO.UniqueID is now a unified global Int32 typealias which vastly simplifies dealing with / storing endpoint IDs
  • MIDI.Event: All event types that reference MIDI note numbers now use MIDI.Note struct instead of raw number
  • MIDI.Note: Added note name style (Yamaha, Roland, Cakewalk) to determine octave numbering in note name strings
  • Misc internal methods renamed for consistency
  • Missing inline docs have been added
MIDIKit - 0.4.12

Published by orchetect over 2 years ago

API Updates

  • Changed MIDI.Event(sysEx7RawBytes:) to MIDI.Event.sysEx7(rawBytes:) static func
  • Changed MIDI.Event(sysEx8RawBytes:) to MIDI.Event.sysEx8(rawBytes:) static func
  • Refactored NRPN API to be consistent with RPN API

Misc

  • Minor README updates
  • Updated CI to build UB2 (both macOS x86 and arm64)
MIDIKit - 0.4.11

Published by orchetect over 2 years ago

Incremental Improvements Update

MIDI Events

  • .noteCC event (MIDI 2.0 only): Switched value to enum case to be consistent with other events
  • RPN Tuning Program Change & Tuning Bank Select now correctly carry 7-bit values
  • Added 3D Sound Controller RPN types

MIDI Thru Connections

  • Addressed Core MDI bug with MIDI Thru connections; now errors out on macOS Big Sur or later
  • MIDI.IO.ThruConnection refactors
  • MIDI.IO.Manager: Added removeAllUnmanagedPersistentThruConnections(ownerID:)

Examples

  • Added EventParsing examples
  • Misc improvements/refactors to examples

Misc

  • Removed remaining TODO compiler warnings
  • Minor inline docs updates
  • Updated unit tests
  • Reworked GitHub CI pipeline
MIDIKit - 0.4.10

Published by orchetect over 2 years ago

Important Bugfix Release

  • Fixed MIDI packet unpacking on macOS Mojave and earlier (macOS Catalina and later are unaffected)
  • .send(events:): Improved reliability of sending SysEx in a multi-event array when using old Core MIDI API
MIDIKit - 0.4.9

Published by orchetect over 2 years ago

New

  • Added basic example projects, with more to come in the next release
  • Added intermediate macOS AppKit example project demonstrating endpoint selection menus
  • The MIDIKit wiki now has a Getting Started Guide as well as additional tips and troubleshooting info

Fixes and Improvements

  • InputConnection and OutputConnection : Fixed an issue where changing mode or filter properties did not immediately take effect.
  • MIDI.IO.Device: Fixed name property containing invalid data
  • MIDISystemInfo example now shows device/entity/endpoint tree to visualize object hierarchy
  • Minor improvements
MIDIKit - 0.4.8

Published by orchetect over 2 years ago

New

  • InputConnection/OutputConnection: Refactored to use mode and filter properties
  • Various Set and Array category methods to convert endpoints to criteria collections

API Changes

MIDI.IO.Manager: .addInputConnection() and .addOutputConnection():

  • automaticallyAddNew[In/Out]puts has now become a new mode enum
  • preventAddingManaged[In/Out]puts has now been refactored into a new filter property that can filter out owned virtual endpoints as well as a set of arbitrary endpoints if needed
MIDIKit - 0.4.7

Published by orchetect over 2 years ago

  • Endpoints: added displayName cached property
  • EndpointIDCriteria: added uniqueIDWithFallback case
  • Expanded custom sorted..., first(...), and filter(...) methods on object & endpoint collections
  • MIDI.IO.Manager.endpoints: Added inputsUnowned and outputsUnowned properties to return all system endpoints excluding virtual endpoints created by the Manager instance
  • Misc. minor improvements
MIDIKit - 0.4.6

Published by orchetect over 2 years ago

  • Updated utility methods
  • Resolved a rare crash when instancing MIDI.IO.Manager with a client name containing unusual characters
MIDIKit - 0.4.5

Published by orchetect over 2 years ago

  • OutputConnection: Added automaticallyAddNewInputs and preventAddingManagedInputs (similar to InputConnection)
MIDIKit - 0.4.4

Published by orchetect over 2 years ago

  • Fixed MIDIEventPacket timestamp which was preventing some apps from receiving MIDI events
MIDIKit - 0.4.3

Published by orchetect over 2 years ago

  • Resolved crashes while parsing MIDI 2.0 events on certain systems
MIDIKit - 0.4.2

Published by orchetect over 2 years ago

  • Fixed NRPN/RPN LSB controller number, added basic unit tests for them
  • InputConnection/OutputConnection: Added disambiguation for add()/remove() overloads
  • Added more flexibility to event CC filters
  • Added Getting Started Guide
  • Updated docs
MIDIKit - 0.4.1

Published by orchetect over 2 years ago

  • MIDI.IO.Manager
    • Added complete set of Core MIDI notifications to notificationHandler with MIDIKit data types
    • Removed systemEndpointsChanged notification case as it's redundant now
MIDIKit - 0.4.0

Published by orchetect over 2 years ago

Release 0.4.0 brings more versatility and stability.

Summary of New Features

  • InputConnection and OutputConnection can now have endpoints added or removed from them.
  • InputConnection can optionally aggregate all MIDI outputs in the system in order to act as a MIDI event sink that receives from all MIDI outputs in the system, and will automatically add new outputs that appear in the system during its lifecycle.
  • Added support for network MIDI sessions

Connections

  • InputConnection: Added add(outputs:), remove(outputs:), removeAllOutputs()
  • OutputConnection: Added add(inputs:), remove(inputs:), removeAllInputs()
  • Added endpoint array overloads to addInputConnection(:::) and addOutputConnection(::)
  • InputConnection: Added automaticallyAddNewOutputs property
  • InputConnection: Added preventAddingManagedOutputs property
  • Input/Output: added endpoint property

Endpoints

  • Added current() static constructor for *Endpoint sets and arrays

Network MIDI

  • Added MIDI network session support: setNetworkSession(policy:) static method in MIDI.IO

Misc

  • Manager no longer disposes of its MIDI client reference on deinit, as per Apple docs
  • Unit tests updated
Package Rankings
Top 17.85% on Swiftpackageindex.com
Badges
Extracted from project README
Xcode 14-16 License: MIT