【发布时间】:2019-09-14 08:51:41
【问题描述】:
所以我一直在尝试从我为 iPad 构建的 iOS 应用程序获取 MIDI 信息以发送到我的计算机。我设置了客户端和输出端口,并获得了结束参考点。当我启动 iPad 时,Mac 上的 MIDI 监视器会读取 MIDI 系统执行消息,但没有其他任何反应。我有一个非常一般的 MIDISend 消息,试图在消息上发送一个注释,但这不是很成功。我通过音频 MIDI 设置通过 IDAM MIDI 主机连接了我的 iPad,但无法传输任何内容。
我已经尝试过使用 Core MIDI 的各种选项,例如获取源、获取实体源、获取目的地,几乎都返回 IDAM MIDI 主机的相同类型的属性。我的代码中到处都有打印语句,试图找出问题出在哪里,但我现在卡住了,因为我不知道哪里出了问题。
这是我在一个类中创建的一些函数,用于创建客户端、创建输出端口和发送 MIDI 信息:
这些函数之外的一些变量声明:
func openClient(){
MIDIClientCreate("Gregs iPad" as CFString, nil, nil, &midiClient)
}
func createPort(){
MIDIOutputPortCreate(midiClient, "Output" as CFString, &outputPort)
}
func gainSource(){
// determine how many devices are connected
midiDevice = MIDIGetDevice(2) // this is IDAM MIDI Host
let entcount = MIDIDeviceGetNumberOfEntities(midiDevice) // number of entities
ent = MIDIDeviceGetEntity(midiDevice, 0) // obtain the entity reference
// obtain the end point ref from this entity
midiSource = MIDIEntityGetDestination(ent, 0)
midiSource2 = MIDIEntityGetSource(ent, 0)
// Trying to send some MIDI within this function
let pack = UnsafeMutablePointer<MIDIPacket>.allocate(capacity: 1)
let packLst = UnsafeMutablePointer<MIDIPacketList>.allocate(capacity: 1)
//let midiDataToSend:[UInt8] = [UInt8(0xB0), UInt8(0x0A), UInt8(20)];
let midiDataToSend:[UInt8] = [UInt8(0x90), UInt8(60), UInt8(100)];
MIDIPacketListInit(packLst);
MIDIPacketListAdd(packLst, 1024, pack, 0, 3, midiDataToSend);
MIDISend(outputPort, midiSource, packLst)
MIDIReceived(midiSource, packLst)
print(packLst)
}
我还尝试使用 MIDIReceived 来查看是否也会发送任何内容,但没有成功。我希望看到一些关于特定状态和数据字节声明的信息发送到我的 DAW,但似乎没有任何工作成功。任何帮助将不胜感激!
【问题讨论】:
标签: ios swift ipad midi coremidi