【问题标题】:Issues Sending MIDI information on iOS Applications在 iOS 应用程序上发送 MIDI 信息的问题
【发布时间】: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


    【解决方案1】:

    对于其他查看此内容的人,我想通了。数据包变量需要分配给数据包列表初始化,以作为数据包列表添加函数的指针传递。在我的代码的最后一部分中,您需要更改:var pack = UnsafeMutablePointer.allocate(capacity: 1),然后将其设置为等于初始化 (pack = MIDIPacketListInit(packLst);)。在我阅读 MIDIPacketListAdd 函数并意识到 currentpacket 参数输入 HAD 是一个指针后,我注意到了这一点。希望这更有意义。

    【讨论】:

    • 这是什么意思?你能显示一些更正的代码吗?
    • 在我的代码的最后一部分你需要更改:var pack = UnsafeMutablePointer.allocate(capacity: 1),然后将其设置为等于初始化 (pack = MIDIPacketListInit(packLst) ;)。在我阅读 MIDIPacketListAdd 函数并意识到 currentpacket 参数输入 HAD 是一个指针后,我注意到了这一点。希望这更有意义。
    • 我建议您可以将其放在答案中,以帮助未来的用户。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多