Swift 包,旨在轻松地将 MIDI 控制器连接到使用 Combine 和 async-await 的 SwiftUI (或 UIKit)。
此包是作为 UIKonf 2020 演讲 Combine:将 MIDI 信号连接到 SwiftUI 的一部分创建的。它的主要目标是从所有 MIDI 源读取消息,并能够在用户界面中呈现这些值。
有关更多指导、演示和历史记录,请参阅演讲材料
将此包添加到您的 Xcode 项目或将以下行添加到您的 Package.swift
文件
.package(url: "https://github.com/mkj-is/CombineMIDI.git", from: "0.3.0")
首先,您需要创建一个 MIDI 客户端,每个应用程序创建一个客户端就足够了(您可以选择将客户端名称作为初始化程序参数传递)
let client = MIDIClient(name: "My app MIDI client")
您可能首先要做的是过滤与您相关的消息并获取值。
let stream = client.stream
.filter { $0.status == .controlChange }
.compactMap(\.data2)
然后,您可以在一个简单的 for 循环中处理消息。循环将无限期运行,直到包含它的任务被取消。
for await message in stream {
...
}
当使用 Combine 时,您创建一个 publisher,它会自动连接到所有源并在订阅时监听所有消息。
在用户界面上订阅时,不要忘记在主线程上接收这些事件。为了防止过早分发,publisher 在 CoreMIDI 使用的线程上发出,因此您可以快速过滤所有消息。
cancellable = client
.publisher()
.filter { $0.status == .controlChange }
.compactMap(\.data2)
.receive(on: RunLoop.main)
.sink { value in
...
}
这个库刻意做得小巧,并且有很大的改进潜力
欢迎所有贡献。
项目由 Matěj Kašpar Jirásek 创建。
项目根据 MIT 许可证获得许可。