- 确认项目使用的是 AudioKit 5.3.0 版本:
pod 'AudioKit', '~> 5.3.0'
- 在 MIDICallbackInstrument 中添加回调函数:
let callbackInst = MIDICallbackInstrument()
callbackInst.setMIDIReceiver { (packetList: UnsafePointer) in
var packet = packetList.pointee.packet
for _ in 0 ..< packetList.pointee.numPackets {
let status = packet.data.0 >> 4
let cmd = packet.data.0 & 0xF
let channel = packet.data.0 & 0x0F
let data1 = packet.data.1
let data2 = packet.data.2
// your custom MIDI code goes here
packet = MIDIPacketNext(&packet).pointee
}
}
midi.addOutput(callbackInst.midiIn)
- 在需要发送 MIDI 数据的地方准备好数据并发送:
let status = UInt8(0x90) // note on
let note = UInt8(60) // middle C
let velocity = UInt8(127)
let packet: [UInt8] = [status, note, velocity]
let packetList = UnsafeMutablePointer.allocate(capacity: 1)
var packetListPtr: UnsafeMutablePointer = MIDIPacketListInit(packetList)
packetListPtr = MIDIPacketListAdd(packetList, 1024, packetListPtr, 0, packet.count, packet)
midi.send(packetList, toDestination: midi.destinationNames[0])
- 运行代码并测试 MIDICallbackInstrument 是否正常工作。