以下代码为我提供了所有可用的MIDI设备的名称。 直到iOS12.4,一切正常。我得到了USB设备和“网络会话”。 从iOS13开始,我只获得USB设备。但是,如果没有“网络会话”,就无法连接到Ableton Live这样的计算机上的软件MIDI设备。
func getSourceNames() -> [String] {
var names:[String] = [];
let count: Int = MIDIGetNumberOfSources();
for i in 0..<count {
let endpoint:MIDIEndpointRef = MIDIGetSource(i);
if (endpoint != 0) {
if let name = getDisplayName(endpoint) {
names.append(name)
}
}
}
return names;
}
func getDisplayName(_ obj: MIDIObjectRef) -> String?
{
var param: Unmanaged<CFString>?
var name: String? = nil
let err: OSStatus = MIDIObjectGetStringProperty(obj, kMIDIPropertyDisplayName, ¶m)
if enabled, err == OSStatus(noErr)
{
name = param!.takeRetainedValue() as String
}
return name
}
更新(12.12.2019) 查找原因: 我必须立即启用网络会话。
MIDINetworkSession.default().isEnabled = true
MIDINetworkSession.default().connectionPolicy = .anyone