Swift COV License: MIT

MorkAndMIDI

这是一个建立在 Core MIDI 之上的非常轻量级的 Swift 层,它会打开一个虚拟 MIDI 目标端口和端口,并自动连接到网络上出现的任何 MIDI 端点,无需任何询问。

目前仅支持一些 MIDI v1 消息。 然而,它也增强了 MIDIPacketMIDIPacketList,以支持构建新的 MIDI 包和解析它们。

特性

这个包基本上设置了 MIDI 并连接到它找到的所有可用输入。 连接状态可以通过安装 Monitor 实例来监控,实际的 MIDI 命令可以通过安装 Receiver 实例来观察。 其他一切都应该由该包自动处理。

使用方法

创建一个新的 MIDI 实例,传入一个名称用于它将创建的端点,以及一个将分配给端点的唯一 ID。

let midi = MIDI(clientName: "Na-Nu Na-Nu", uniqueId: 12_345,  midiProto: .legacy)
midi.monitor = my_monitor
midi.receiver = my_receiver
midi.start()

理想情况下,这个 uniqueId 值对于您的 MIDI 网络来说是真正唯一的。 然而,没有办法保证这一点,所以应该安装一个 Monitor 来观察在初始化完成后传递给 Monitor.initialized 例程的唯一 ID 值。 当没有冲突时,这个值将与 MIDI 构造函数中给出的值相同。 如果存在冲突,您应该获得一个系统提供的值。

CoreMIDI 协议版本

该包支持以下 CoreMIDI MIDIProtocolID 值以及一种传统模式。 这些都编码在 MorkAndMIDI 的 MIDIProto 枚举中。

legacy 模式可能是目前最安全的,因为在我的 SoundFonts 应用程序中已经进行了最多的测试。

处理 MIDI 消息

Receiver 协议定义了当通过 USB 或网络接收到 MIDI 命令时将被调用的函数。 由于它们都是可选的,您只需要实现您想要的命令。

请注意,目前不支持 SysEx (0xF0) 命令,并且会被静默忽略。 我不需要它们,但是支持它们应该不会太困难 -- 您只需要缓冲 MIDI 数据包直到完成即可。

连接性

MIDI 类监听 MIDI 网络的变化,并在必要时创建/销毁与外部设备的连接。 Monitor 协议具有您可以实现的方法,以便在连接和/或设备发生变化时收到通知。 还有一种方法可以跟踪外部设备正在使用的 MIDI 通道。