🎹 Modern multi-platform Swift CoreMIDI wrapper with MIDI 2.0 support.
MIT License
Bot releases are visible (Hide)
Published by orchetect almost 2 years ago
.eventsWithMetadata { }
MIDI event receive handler that includes MIDI packet timestamp and the source endpointentity
and device
property)Published by orchetect about 2 years ago
HUIHost
object is now available for HUI host applications to manage one or more HUIHostBank
remote HUI devices. (#136 / #139)Published by orchetect about 2 years ago
Published by orchetect about 2 years ago
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+.
Published by orchetect about 2 years ago
MIDI.Event.sysEx7(rawHexString:)
static initializer
"F7 01 02 03 F0"
or "f7010203f0"
)MIDI.Event.SysEx7
instance: Added .midi1RawHexString()
method
MIDI.Event.noteManagement()
: Added note:
parameter label for consistencyPublished by orchetect over 2 years ago
MIDI.Byte.Pair
: Added UInt16
interopPublished by orchetect over 2 years ago
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 IDsMIDI.Event
: All event types that reference MIDI note numbers now use MIDI.Note
struct instead of raw numberMIDI.Note
: Added note name style
(Yamaha, Roland, Cakewalk) to determine octave numbering in note name stringsPublished by orchetect over 2 years ago
MIDI.Event(sysEx7RawBytes:)
to MIDI.Event.sysEx7(rawBytes:)
static funcMIDI.Event(sysEx8RawBytes:)
to MIDI.Event.sysEx8(rawBytes:)
static funcPublished by orchetect over 2 years ago
.noteCC
event (MIDI 2.0 only): Switched value to enum case to be consistent with other eventsMIDI.IO.ThruConnection
refactorsMIDI.IO.Manager
: Added removeAllUnmanagedPersistentThruConnections(ownerID:)
Published by orchetect over 2 years ago
.send(events:)
: Improved reliability of sending SysEx in a multi-event array when using old Core MIDI APIPublished by orchetect over 2 years ago
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 dataPublished by orchetect over 2 years ago
InputConnection
/OutputConnection
: Refactored to use mode
and filter
propertiesSet
and Array
category methods to convert endpoints to criteria collectionsMIDI.IO.Manager
: .addInputConnection()
and .addOutputConnection()
:
automaticallyAddNew[In/Out]puts
has now become a new mode
enumpreventAddingManaged[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 neededPublished by orchetect over 2 years ago
displayName
cached propertyEndpointIDCriteria
: added uniqueIDWithFallback
casesorted...
, first(...)
, and filter(...)
methods on object & endpoint collectionsMIDI.IO.Manager.endpoints
: Added inputsUnowned
and outputsUnowned
properties to return all system endpoints excluding virtual endpoints created by the Manager
instancePublished by orchetect over 2 years ago
MIDI.IO.Manager
with a client name containing unusual charactersPublished by orchetect over 2 years ago
OutputConnection
: Added automaticallyAddNewInputs
and preventAddingManagedInputs
(similar to InputConnection
)Published by orchetect over 2 years ago
MIDIEventPacket
timestamp which was preventing some apps from receiving MIDI eventsPublished by orchetect over 2 years ago
Published by orchetect over 2 years ago
InputConnection
/OutputConnection
: Added disambiguation for add()
/remove()
overloadsPublished by orchetect over 2 years ago
MIDI.IO.Manager
notificationHandler
with MIDIKit data typessystemEndpointsChanged
notification case as it's redundant nowPublished by orchetect over 2 years ago
Release 0.4.0 brings more versatility and stability.
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.InputConnection
: Added add(outputs:)
, remove(outputs:)
, removeAllOutputs()
OutputConnection
: Added add(inputs:)
, remove(inputs:)
, removeAllInputs()
addInputConnection(:::)
and addOutputConnection(::)
InputConnection
: Added automaticallyAddNewOutputs
propertyInputConnection
: Added preventAddingManagedOutputs
propertyInput
/Output
: added endpoint
propertycurrent()
static constructor for *Endpoint
sets and arrayssetNetworkSession(policy:)
static method in MIDI.IO
Manager
no longer disposes of its MIDI client reference on deinit, as per Apple docs