有没有办法判断 iOS 上是否通过 USB 连接了 MIDI 设备?
Is there a way to tell if a MIDI-Device is connected via USB on iOS?
我正在使用 CoreMIDI 通过 iOS- 设备上的相机连接套件从 MIDI 键盘接收消息。我的应用程序是关于音高识别的。我希望以下功能是自动的:
默认情况下使用麦克风(已实现),如果连接了 MIDI 键盘,请改用麦克风。
它可以找到如何判断它是否是使用默认驱动程序的 USB 键盘。只需询问名为 "USB-MIDI":
的设备
private func getUSBDeviceReference() -> MIDIDeviceRef? {
for index in 0..<MIDIGetNumberOfDevices() {
let device = MIDIGetDevice(index)
var name : Unmanaged<CFString>?
MIDIObjectGetStringProperty(device, kMIDIPropertyName, &name)
if name!.takeRetainedValue() as String == "USB-MIDI" {
return device
}
}
return nil
}
但不幸的是,有些 USB 键盘使用自定义驱动程序。 如何判断我是否正在查看其中之一?标准蓝牙和网络设备似乎始终在线。即使设备上的 Wifi 和蓝牙已关闭(奇怪?)。
我最终使用了 USBLocationID
。它适用于我迄今为止测试过的任何设备和 none 的用户 complained.But 我不希望很多用户使用我的应用程序的 MIDI 功能。
/// Filters all `MIDIDeviceRef`'s for USB-Devices
private func getUSBDeviceReferences() -> [MIDIDeviceRef] {
var devices = [MIDIDeviceRef]()
for index in 0..<MIDIGetNumberOfDevices() {
let device = MIDIGetDevice(index)
var list: Unmanaged<CFPropertyList>?
MIDIObjectGetProperties(device, &list, true)
if let list = list {
let dict = list.takeRetainedValue() as! NSDictionary
if dict["USBLocationID"] != nil {
devices.append(device)
}
}
}
return devices
}
我正在使用 CoreMIDI 通过 iOS- 设备上的相机连接套件从 MIDI 键盘接收消息。我的应用程序是关于音高识别的。我希望以下功能是自动的:
默认情况下使用麦克风(已实现),如果连接了 MIDI 键盘,请改用麦克风。
它可以找到如何判断它是否是使用默认驱动程序的 USB 键盘。只需询问名为 "USB-MIDI":
的设备private func getUSBDeviceReference() -> MIDIDeviceRef? {
for index in 0..<MIDIGetNumberOfDevices() {
let device = MIDIGetDevice(index)
var name : Unmanaged<CFString>?
MIDIObjectGetStringProperty(device, kMIDIPropertyName, &name)
if name!.takeRetainedValue() as String == "USB-MIDI" {
return device
}
}
return nil
}
但不幸的是,有些 USB 键盘使用自定义驱动程序。 如何判断我是否正在查看其中之一?标准蓝牙和网络设备似乎始终在线。即使设备上的 Wifi 和蓝牙已关闭(奇怪?)。
我最终使用了 USBLocationID
。它适用于我迄今为止测试过的任何设备和 none 的用户 complained.But 我不希望很多用户使用我的应用程序的 MIDI 功能。
/// Filters all `MIDIDeviceRef`'s for USB-Devices
private func getUSBDeviceReferences() -> [MIDIDeviceRef] {
var devices = [MIDIDeviceRef]()
for index in 0..<MIDIGetNumberOfDevices() {
let device = MIDIGetDevice(index)
var list: Unmanaged<CFPropertyList>?
MIDIObjectGetProperties(device, &list, true)
if let list = list {
let dict = list.takeRetainedValue() as! NSDictionary
if dict["USBLocationID"] != nil {
devices.append(device)
}
}
}
return devices
}