Wee*_*ebs 3 midi cocoa objective-c coremidi swift
我对 Swift/Objective-C 或 Cocoa 环境不是很熟悉,而且我在弄清楚如何使用 CoreMIDI 从 USB 设备发送或收听数据时遇到了很多麻烦。我正在尝试将消息 (144, 36, 5) 发送到我在使用 Bitwig Studio 脚本 API 之前已经完成的 MIDI 控制器(Ableton Push)。除了 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)
Run Code Online (Sandbox Code Playgroud)
我觉得无法弄清楚这一点有点傻,我想它必须是一个简单的解决方案,但由于某种原因我无法弄清楚。我认为我没有正确构建 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)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5210 次 |
| 最近记录: |