使用 CoreMIDI 发送系统独有消息
Sending a system exclusive message using CoreMIDI
我正在开发一个使用 MIDI 的 MacOS 应用程序。我想做的是将 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
应该是什么?
我找不到任何我可以使用的示例或参考。有人可以帮助我/
提前致谢。
保留表示不能使用,如:"reserved for internal use"
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.
*/
注意保留变量甚至没有出现在 header 中。
快速 google 显示了许多用 swift 编写的使用 MIDI 的项目。浏览其中一些以查看工作示例。
我看到的第一个似乎非常适合了解事情是如何完成的。它甚至有很多 .java 文件,因此您可能更容易了解它与 swift 的关系(或如何连接它们)。
看这里:MIDI in Swift
在 CoreMIDI 框架中有一个名为 "MIDIServices.h" 的文件(finder 会为您找到它)。它有很多关于 MIDI 的信息。
祝你好运!!
我正在开发一个使用 MIDI 的 MacOS 应用程序。我想做的是将 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
应该是什么?
我找不到任何我可以使用的示例或参考。有人可以帮助我/
提前致谢。
保留表示不能使用,如:"reserved for internal use"
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.
*/
注意保留变量甚至没有出现在 header 中。
快速 google 显示了许多用 swift 编写的使用 MIDI 的项目。浏览其中一些以查看工作示例。
我看到的第一个似乎非常适合了解事情是如何完成的。它甚至有很多 .java 文件,因此您可能更容易了解它与 swift 的关系(或如何连接它们)。
看这里:MIDI in Swift
在 CoreMIDI 框架中有一个名为 "MIDIServices.h" 的文件(finder 会为您找到它)。它有很多关于 MIDI 的信息。
祝你好运!!