gpt4 book ai didi

objective-c - 使用 Swift 和 CoreMIDI 发送和接收 MIDI

转载 作者:可可西里 更新时间:2023-11-01 01:06:31 27 4
gpt4 key购买 nike

我对 Swift/Objective-C 或 Cocoa 环境不是很熟悉,而且我在弄清楚如何使用 CoreMIDI 从 USB 设备发送或监听数据时遇到了很多麻烦。我正在尝试将消息 (144, 36, 5) 发送到我的 MIDI Controller (一个 Ableton Push),这是我在使用 Bitwig Studio Scripting API 之前完成的。除了 Apple 的文档外,我在这方面找不到太多信息,而且它们对我没有特别帮助。到目前为止,我已经弄清楚了如何获取设备列表并查看它们的名称,但除此之外,我还是卡住了。

到目前为止,我尝试发送 MIDI 所写的内容:

var pushDevice = MIDIGetDevice(2)

var secondEntity = MIDIDeviceGetEntity(pushDevice, 1)

var pushDestination = MIDIEntityGetDestination(secondEntity, 0)

var midiPort = MIDIPortRef()

let myData : [Byte] = [ Byte(144), Byte(36), Byte(5) ]
var packet = UnsafeMutablePointer<MIDIPacket>.alloc(1)
var pkList = UnsafeMutablePointer<MIDIPacketList>.alloc(1)
packet = MIDIPacketListInit(pkList)
packet = MIDIPacketListAdd(pkList, 1024, packet, 0, 3, myData)

MIDISend(midiPort, pushDestination, pkList)

我觉得自己有点傻,因为我无法弄清楚这一点,我想它必须是一个简单的解决方案,但由于某种原因我无法弄清楚。我认为我没有正确构建 MIDIPacketList 或 MIDIPort,而且我不知道如何着手创建回调和监听 MIDI 消息。

最佳答案

我想出了如何通过设备的唯一 ID 获取设备来发送 MIDI 数据。我不确定内存管理在 Swift 中是如何工作的,所以请记住这一点。如果我弄清楚如何正确创建回调并监听 MIDI 输入,我会稍后再回来查看。

import Foundation
import CoreMIDI

var midiClient = MIDIClientRef()
var result = MIDIClientCreate("Foo Client", nil, nil, &midiClient)


var outputPort = MIDIPortRef()
result = MIDIOutputPortCreate(midiClient, "Output", &outputPort);

var endPoint = MIDIObjectRef()
var foundObj = MIDIObjectType()
result = MIDIObjectFindByUniqueID(UNIQUE_ID, &endPoint, &foundObj)

var pkt = UnsafeMutablePointer<MIDIPacket>.alloc(1)
var pktList = UnsafeMutablePointer<MIDIPacketList>.alloc(1)
let midiData : [Byte] = [Byte(144), Byte(36), Byte(5)]
pkt = MIDIPacketListInit(pktList)
pkt = MIDIPacketListAdd(pktList, 1024, pkt, 0, 3, midiData)

MIDISend(outputPort, endPoint, pktList)

关于objective-c - 使用 Swift 和 CoreMIDI 发送和接收 MIDI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27416435/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com