You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:02:52