使用CoreMIDI发送系统专用消息

时间:2017-06-07 11:05:29

标签: swift macos midi coremidi

我在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应该是什么?

我无法找到我可以使用的任何示例或参考资料。有人可以帮助我/

提前致谢。

1 个答案:

答案 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的信息。

祝你好运!