【发布时间】:2021-10-16 02:47:39
【问题描述】:
我正在将 AudioKit 的 MIDI 库与应用程序一起使用。虽然该框架是专有的,但有问题的代码返回的是本机结构,即 MIDIObjectPropertyChangeNotification。
这是代码,其中 MIDIListener 是由 AudioKit 定义的协议,而 MIDIConnectionManager 是我用于管理 MIDI 的类。在这个回调中,我正在通过 RTP-MIDI 监听连接和断开连接
extension MIDIConnectionManager: MIDIListener {
func receivedMIDIPropertyChange(propertyChangeInfo: MIDIObjectPropertyChangeNotification) {
let propertyName = Unmanaged.fromOpaque(propertyChangeInfo.propertyName.toOpaque()).takeUnretainedValue() as CFString
if propertyChangeInfo.objectType == .entity && propertyName as String == "apple.midirtp.session" {
// do something in response
}
}
当我连接和断开我的应用程序时,回调会触发。但它似乎只知道被改变的属性,而不是它的价值。我假设这也将在 MIDIObjectPropertyChangeNotification 结构中。但它不是 (https://developer.apple.com/documentation/coremidi/midiobjectpropertychangenotification)。
我看到它确实公开了 MIDIObjectRef(“属性已更改的对象。”,https://developer.apple.com/documentation/coremidi/midiobjectpropertychangenotification/1495180-object),但它仅指“var propertyName: Unmanaged 已修改属性的名称。”
所以我认为必须有一种方法可以获取该对象的所有属性,并且确实足够 func MIDIObjectGetProperties (https://developer.apple.com/documentation/coremidi/1495206-midiobjectgetproperties)
但我对 Swift 还很陌生,我的技能在这里停滞不前!下一步去哪儿?我不明白如何使用该函数,我对 UnsafeMutablePointer 有点害怕!
【问题讨论】:
标签: swift midi audiokit coremidi