我在MacOS应用程序上工作,我正在使用MIDI。我想要做的是将SysEx消息发送到MIDI设备。现在,我已经用Java完成了一次,但从未在Swift中完成。
由于coremidi
库对我来说几乎是全新的,我不知道这是如何工作的。到目前为止我所知道的是我必须撰写一个MIDISysexSendRequest
,而且我已经走到了这一步:
let SysEx = MIDISysexSendRequest(destination: self.endpointRef, data: UnsafePointer<UInt8>, bytesToSend: 8, complete: complete, reserved: (UInt8, UInt8, UInt8), completionProc: completionProc, completionRefCon: nil)
在这方面,有一些事让我感到困惑:
data
变量?我知道我想发送什么字节,而不是如何格式化Swift reserved
应该是什么?我无法找到我可以使用的任何示例或参考资料。有人可以帮助我/
提前致谢。
答案 0 :(得分:3)
保留表示您无法使用它,例如:“保留供内部使用”
struct MIDISysexSendRequest
{
MIDIEndpointRef destination;
const Byte * data;
UInt32 bytesToSend;
Boolean complete;
Byte reserved[3];
MIDICompletionProc completionProc;
void * __nullable completionRefCon;
};
/*!
@struct MIDISysexSendRequest
@abstract A request to transmit a system-exclusive event.
@field destination
The endpoint to which the event is to be sent.
@field data
Initially, a pointer to the sys-ex event to be sent.
MIDISendSysex will advance this pointer as bytes are
sent.
@field bytesToSend
Initially, the number of bytes to be sent. MIDISendSysex
will decrement this counter as bytes are sent.
@field complete
The client may set this to true at any time to abort
transmission. The implementation sets this to true when
all bytes have been sent.
@field completionProc
Called when all bytes have been sent, or after the client
has set complete to true.
@field completionRefCon
Passed as a refCon to completionProc.
@discussion
This represents a request to send a single system-exclusive MIDI event to
a MIDI destination asynchronously.
*/
注意保留变量如何甚至不显示在标题中。
快速谷歌显示许多用swift写的使用MIDI的项目。浏览其中一些以查看工作示例。
我看到的第一个看起来非常适合看事情如何完成。它甚至有很多.java文件,所以你可能更容易看到它与swift(或如何连接它们)的关系。
看看这里:MIDI in Swift
在CoreMIDI框架中有一个名为“MIDIServices.h”的文件(finder会为你找到它)。它有很多关于MIDI的信息。
祝你好运!