iOS平台使用AudioKit能否识别已连接的MIDI设备?
在iOS中使用AudioKit识别已连接的MIDI设备
当然可以!AudioKit完全支持识别iOS设备上已连接的MIDI输入/输出设备,你提到启动MIDI输出时能指定设备名称,其实就是基于它能枚举设备列表的能力来实现的。下面是具体的实现方法:
获取已连接的MIDI设备列表
AudioKit的AKMIDI单例类提供了直接获取输入、输出设备列表的属性,每个设备信息封装在AKMIDIDevice对象中,包含名称、ID等关键信息。
枚举MIDI输入设备
import AudioKit // 先确保MIDI服务已启动 AKMIDI.shared.start() // 获取所有已连接的MIDI输入设备 let midiInputDevices = AKMIDI.shared.inputs for device in midiInputDevices { print("输入设备:\(device.name),设备ID:\(device.id)") }
枚举MIDI输出设备
// 获取所有已连接的MIDI输出设备 let midiOutputDevices = AKMIDI.shared.outputs for device in midiOutputDevices { print("输出设备:\(device.name),设备ID:\(device.id)") }
实时监听设备连接/断开事件
如果需要实时检测MIDI设备的连接状态变化(比如用户插拔蓝牙MIDI键盘),可以通过监听系统通知来实现:
// 在合适的地方注册通知监听(比如viewDidLoad) NotificationCenter.default.addObserver( forName: .AKMIDIDeviceListChanged, object: nil, queue: .main ) { _ in print("MIDI设备列表已更新!") // 这里重新获取设备列表并更新UI或业务逻辑 let updatedInputs = AKMIDI.shared.inputs let updatedOutputs = AKMIDI.shared.outputs // 处理更新后的设备数据 } // 记得在不需要时移除监听(比如deinit) deinit { NotificationCenter.default.removeObserver(self, name: .AKMIDIDeviceListChanged, object: nil) }
注意事项
- 调用设备枚举API前,务必先调用
AKMIDI.shared.start()启动MIDI服务,否则可能获取不到设备列表。 - 对于蓝牙MIDI设备,需要在
Info.plist中添加蓝牙权限描述(NSBluetoothAlwaysUsageDescription或NSBluetoothPeripheralUsageDescription),确保应用能访问蓝牙设备。
内容的提问来源于stack exchange,提问作者Uncle Kenny
相关产品推荐
相关产品推荐

