这是一个建立在 Core MIDI 之上的非常轻量级的 Swift 层,它会打开一个虚拟 MIDI 目标端口和端口,并自动连接到网络上出现的任何 MIDI 端点,无需任何询问。
目前仅支持一些 MIDI v1 消息。 然而,它也增强了 MIDIPacket
和 MIDIPacketList
,以支持构建新的 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 MIDIProtocolID 值以及一种传统模式。 这些都编码在 MorkAndMIDI 的 MIDIProto 枚举中。
legacy 模式可能是目前最安全的,因为在我的 SoundFonts 应用程序中已经进行了最多的测试。
Receiver
协议定义了当通过 USB 或网络接收到 MIDI 命令时将被调用的函数。 由于它们都是可选的,您只需要实现您想要的命令。
请注意,目前不支持 SysEx (0xF0) 命令,并且会被静默忽略。 我不需要它们,但是支持它们应该不会太困难 -- 您只需要缓冲 MIDI 数据包直到完成即可。
MIDI
类监听 MIDI 网络的变化,并在必要时创建/销毁与外部设备的连接。 Monitor
协议具有您可以实现的方法,以便在连接和/或设备发生变化时收到通知。 还有一种方法可以跟踪外部设备正在使用的 MIDI 通道。