MIDI

摘要

枚举

匿名枚举 14{
  AMIDI_OPCODE_DATA = 1,
  AMIDI_OPCODE_FLUSH = 2
}
enum
匿名枚举 15{
  AMIDI_DEVICE_TYPE_USB = 1,
  AMIDI_DEVICE_TYPE_VIRTUAL = 2,
  AMIDI_DEVICE_TYPE_BLUETOOTH = 3
}
enum
AMidiDevice_Protocol{
  AMIDI_DEVICE_PROTOCOL_UMP_USE_MIDI_CI = 0,
  AMIDI_DEVICE_PROTOCOL_UMP_MIDI_1_0_UP_TO_64_BITS = 1,
  AMIDI_DEVICE_PROTOCOL_UMP_MIDI_1_0_UP_TO_64_BITS_AND_JRTS = 2,
  AMIDI_DEVICE_PROTOCOL_UMP_MIDI_1_0_UP_TO_128_BITS = 3,
  AMIDI_DEVICE_PROTOCOL_UMP_MIDI_1_0_UP_TO_128_BITS_AND_JRTS = 4,
  AMIDI_DEVICE_PROTOCOL_UMP_MIDI_2_0 = 17,
  AMIDI_DEVICE_PROTOCOL_UMP_MIDI_2_0_AND_JRTS = 18,
  AMIDI_DEVICE_PROTOCOL_UNKNOWN = -1
}
enum

Typedef

AMidiDevice typedef
struct AMidiDevice
AMidiDevice_Protocol typedef
AMidiInputPort typedef
struct AMidiInputPort
AMidiOutputPort typedef
struct AMidiOutputPort

函数

AMidiDevice_fromJava(JNIEnv *env, jobject midiDeviceObj, AMidiDevice **outDevicePtrPtr)
media_status_t AMIDI_API
将原生 Midi 设备对象连接到关联的 Java MidiDevice 对象。
AMidiDevice_getDefaultProtocol(const AMidiDevice *device)
获取 MIDI 设备默认协议。
AMidiDevice_getNumInputPorts(const AMidiDevice *device)
ssize_t AMIDI_API
获取指定 MIDI 设备上可用的输入(发送)端口数量。
AMidiDevice_getNumOutputPorts(const AMidiDevice *device)
ssize_t AMIDI_API
获取指定 MIDI 设备上可用的输出(接收)端口数量。
AMidiDevice_getType(const AMidiDevice *device)
int32_t AMIDI_API
获取 MIDI 设备类型。
AMidiDevice_release(const AMidiDevice *midiDevice)
media_status_t AMIDI_API
断开原生 Midi 设备对象与关联的 Java MidiDevice 对象的连接。
AMidiInputPort_close(const AMidiInputPort *inputPort)
void AMIDI_API
关闭输入端口。
AMidiInputPort_open(const AMidiDevice *device, int32_t portNumber, AMidiInputPort **outInputPortPtr)
media_status_t AMIDI_API
打开输入端口,以便客户端可以向其发送数据。
AMidiInputPort_send(const AMidiInputPort *inputPort, const uint8_t *buffer, size_t numBytes)
ssize_t AMIDI_API
将数据发送到指定的输入端口。
AMidiInputPort_sendFlush(const AMidiInputPort *inputPort)
media_status_t AMIDI_API
将包含“MIDI 刷新命令代码”的消息发送到指定的端口。
AMidiInputPort_sendWithTimestamp(const AMidiInputPort *inputPort, const uint8_t *buffer, size_t numBytes, int64_t timestamp)
ssize_t AMIDI_API
将带有时间戳的数据发送到指定的输入端口。
AMidiOutputPort_close(const AMidiOutputPort *outputPort)
void AMIDI_API
关闭输出端口。
AMidiOutputPort_open(const AMidiDevice *device, int32_t portNumber, AMidiOutputPort **outOutputPortPtr)
media_status_t AMIDI_API
打开输出端口,以便客户端可以从中接收数据。
AMidiOutputPort_receive(const AMidiOutputPort *outputPort, int32_t *opcodePtr, uint8_t *buffer, size_t maxBytes, size_t *numBytesReceivedPtr, int64_t *outTimestampPtr)
ssize_t AMIDI_API
接收下一个待处理的 MIDI 消息。

枚举

匿名枚举 14

声明位于 amidi/AMidi.h
 Anonymous Enum 14

匿名枚举 15

声明位于 amidi/AMidi.h
 Anonymous Enum 15

AMidiDevice_Protocol

声明位于 amidi/AMidi.h
 AMidiDevice_Protocol
属性
AMIDI_DEVICE_PROTOCOL_UMP_MIDI_1_0_UP_TO_128_BITS

表示使用通用 MIDI 数据包 (UMP) 的默认协议的常量。

UMP 在“通用 MIDI 数据包 (UMP) 格式和 MIDI 2.0 协议”规范中定义。所有 UMP 数据应为 4 字节的倍数。通过 UMP 使用 MIDI 1.0,数据包大小高达 128 位。

AMIDI_DEVICE_PROTOCOL_UMP_MIDI_1_0_UP_TO_128_BITS_AND_JRTS

表示使用通用 MIDI 数据包 (UMP) 的默认协议的常量。

UMP 在“通用 MIDI 数据包 (UMP) 格式和 MIDI 2.0 协议”规范中定义。所有 UMP 数据应为 4 字节的倍数。通过 UMP 使用 MIDI 1.0,数据包大小高达 128 位,并带有抖动减少时间戳。

AMIDI_DEVICE_PROTOCOL_UMP_MIDI_1_0_UP_TO_64_BITS

表示使用通用 MIDI 数据包 (UMP) 的默认协议的常量。

UMP 在“通用 MIDI 数据包 (UMP) 格式和 MIDI 2.0 协议”规范中定义。所有 UMP 数据应为 4 字节的倍数。通过 UMP 使用 MIDI 1.0,数据包大小高达 64 位。

AMIDI_DEVICE_PROTOCOL_UMP_MIDI_1_0_UP_TO_64_BITS_AND_JRTS

表示使用通用 MIDI 数据包 (UMP) 的默认协议的常量。

UMP 在“通用 MIDI 数据包 (UMP) 格式和 MIDI 2.0 协议”规范中定义。所有 UMP 数据应为 4 字节的倍数。通过 UMP 使用 MIDI 1.0,数据包大小高达 64 位,并带有抖动减少时间戳。

AMIDI_DEVICE_PROTOCOL_UMP_MIDI_2_0

表示使用通用 MIDI 数据包 (UMP) 的默认协议的常量。

UMP 在“通用 MIDI 数据包 (UMP) 格式和 MIDI 2.0 协议”规范中定义。所有 UMP 数据应为 4 字节的倍数。通过 UMP 使用 MIDI 2.0。

AMIDI_DEVICE_PROTOCOL_UMP_MIDI_2_0_AND_JRTS

表示使用通用 MIDI 数据包 (UMP) 的默认协议的常量。

UMP 在“通用 MIDI 数据包 (UMP) 格式和 MIDI 2.0 协议”规范中定义。所有 UMP 数据应为 4 字节的倍数。通过 UMP 使用 MIDI 2.0,并带有抖动减少时间戳。

AMIDI_DEVICE_PROTOCOL_UMP_USE_MIDI_CI

表示使用通用 MIDI 数据包 (UMP) 的默认协议的常量。

UMP 在“通用 MIDI 数据包 (UMP) 格式和 MIDI 2.0 协议”规范中定义。所有 UMP 数据应为 4 字节的倍数。使用 UMP 通过 MIDI-CI 与设备进行协商。MIDI-CI 在“MIDI Capability Inquiry (MIDI-CI)”规范中定义。

AMIDI_DEVICE_PROTOCOL_UNKNOWN

表示默认协议未知的设备的常量。

如果需要通用 MIDI 数据包 (UMP),请通过 MIDI 1.0 使用 MIDI-CI。UMP 在“通用 MIDI 数据包 (UMP) 格式和 MIDI 2.0 协议”规范中定义。MIDI-CI 在“MIDI Capability Inquiry (MIDI-CI)”规范中定义。

Typedef

AMidiDevice

声明位于 amidi/AMidi.h
struct AMidiDevice AMidiDevice

AMidiDevice_Protocol

声明位于 amidi/AMidi.h
enum AMidiDevice_Protocol AMidiDevice_Protocol

AMidiInputPort

声明位于 amidi/AMidi.h
struct AMidiInputPort AMidiInputPort

AMidiOutputPort

声明位于 amidi/AMidi.h
struct AMidiOutputPort AMidiOutputPort

函数

AMidiDevice_fromJava

声明位于 amidi/AMidi.h
media_status_t AMIDI_API AMidiDevice_fromJava(
  JNIEnv *env,
  jobject midiDeviceObj,
  AMidiDevice **outDevicePtrPtr
)

将原生 Midi 设备对象连接到关联的 Java MidiDevice 对象。

使用此 AMidiDevice 访问其余原生 MIDI API。不再使用时,使用 AMidiDevice_release() 与 Java 对象断开连接。

另请参阅:AMEDIA_ERROR_INVALID_OBJECT - midiDeviceObj 为 null 或已连接到原生 AMidiDevice 另请参阅:AMEDIA_ERROR_UNKNOWN - 发生未知错误。

详细信息
参数
env
指向 Java 环境。
midiDeviceObj
Java MidiDevice 对象。
outDevicePtrPtr
指向用于接收 AMidiDevice 的指针
返回值
成功时返回 AMEDIA_OK,否则返回负值错误代码

AMidiDevice_getDefaultProtocol

声明位于 amidi/AMidi.h
AMidiDevice_Protocol AMIDI_API AMidiDevice_getDefaultProtocol(
  const AMidiDevice *device
)

获取 MIDI 设备默认协议。

大多数设备应返回 PROTOCOL_UNKNOWN (-1)。这是有意为之,因为默认支持 UMP 的设备不向后兼容。当设备为 null 时,返回 AMIDI_DEVICE_PROTOCOL_UNKNOWN。

详细信息
参数
device
指定 MIDI 设备。
返回值
MIDI 设备默认协议的标识符:AMIDI_DEVICE_PROTOCOL_UMP_USE_MIDI_CI AMIDI_DEVICE_PROTOCOL_UMP_MIDI_1_0_UP_TO_64_BITS AMIDI_DEVICE_PROTOCOL_UMP_MIDI_1_0_UP_TO_64_BITS_AND_JRTS AMIDI_DEVICE_PROTOCOL_UMP_MIDI_1_0_UP_TO_128_BITS AMIDI_DEVICE_PROTOCOL_UMP_MIDI_1_0_UP_TO_128_BITS_AND_JRTS AMIDI_DEVICE_PROTOCOL_UMP_MIDI_2_0 AMIDI_DEVICE_PROTOCOL_UMP_MIDI_2_0_AND_JRTS AMIDI_DEVICE_PROTOCOL_UNKNOWN

自 API 33 起可用。

AMidiDevice_getNumInputPorts

声明位于 amidi/AMidi.h
ssize_t AMIDI_API AMidiDevice_getNumInputPorts(
  const AMidiDevice *device
)

获取指定 MIDI 设备上可用的输入(发送)端口数量。

另请参阅:AMEDIA_ERROR_INVALID_PARAMETER - device 参数为 NULL另请参阅:AMEDIA_ERROR_UNKNOWN - 无法检索设备信息。

详细信息
参数
device
指定 MIDI 设备。
返回值
如果成功,返回设备上可用的 MIDI 输入(发送)端口数量。如果发生错误,返回表示错误的负值

AMidiDevice_getNumOutputPorts

声明位于 amidi/AMidi.h
ssize_t AMIDI_API AMidiDevice_getNumOutputPorts(
  const AMidiDevice *device
)

获取指定 MIDI 设备上可用的输出(接收)端口数量。

另请参阅:AMEDIA_ERROR_INVALID_PARAMETER - device 参数为 NULL另请参阅:AMEDIA_ERROR_UNKNOWN - 无法检索设备信息。

详细信息
参数
device
指定 MIDI 设备。
返回值
如果成功,返回设备上可用的 MIDI 输出(接收)端口数量。如果发生错误,返回表示错误的负值

AMidiDevice_getType

声明位于 amidi/AMidi.h
int32_t AMIDI_API AMidiDevice_getType(
  const AMidiDevice *device
)

获取 MIDI 设备类型。

另请参阅:AMEDIA_ERROR_INVALID_PARAMETER - device 参数为 NULL另请参阅:AMEDIA_ERROR_UNKNOWN - 未知错误。

详细信息
参数
device
指定 MIDI 设备。
返回值
MIDI 设备类型的标识符:AMIDI_DEVICE_TYPE_USB AMIDI_DEVICE_TYPE_VIRTUAL AMIDI_DEVICE_TYPE_BLUETOOTH 或负值错误代码

AMidiDevice_release

声明位于 amidi/AMidi.h
media_status_t AMIDI_API AMidiDevice_release(
  const AMidiDevice *midiDevice
)

断开原生 Midi 设备对象与关联的 Java MidiDevice 对象的连接。

另请参阅:AMEDIA_ERROR_INVALID_PARAMETER - device 参数为 NULL另请参阅:AMEDIA_ERROR_INVALID_OBJECT - 设备与关联的 Java MidiDevice 不一致。 另请参阅:AMEDIA_ERROR_INVALID_OBJECT - JNI 接口初始化到关联的 Java MidiDevice 失败。 另请参阅:AMEDIA_ERROR_UNKNOWN - 无法检索设备信息。

详细信息
参数
midiDevice
指向原生 AMIDI_MidiDevice。
返回值
成功时返回 AMEDIA_OK,否则返回负值错误代码

AMidiInputPort_close

声明位于 amidi/AMidi.h
void AMIDI_API AMidiInputPort_close(
  const AMidiInputPort *inputPort
)

关闭输入端口。

详细信息
参数
inputPort
标识要关闭的输入(发送)端口。

AMidiInputPort_open

声明位于 amidi/AMidi.h
media_status_t AMIDI_API AMidiInputPort_open(
  const AMidiDevice *device,
  int32_t portNumber,
  AMidiInputPort **outInputPortPtr
)

打开输入端口,以便客户端可以向其发送数据。

在为返回的 AMidiInputPort 调用 AMidiInputPort_close() 之前,该端口将保持打开和有效状态。

另请参阅:AMEDIA_ERROR_UNKNOWN - 未知错误。

详细信息
参数
device
指定 MIDI 设备。
portNumber
指定设备上要打开的从零开始的端口索引。该值的范围是 0 到 AMidiDevice_getNumInputPorts() 函数报告的输入端口数量减 1 之间的值。
outInputPortPtr
接收打开端口的原生 API 端口标识符。
返回值
AMEDIA_OK,或负值错误代码

AMidiInputPort_send

声明位于 amidi/AMidi.h
ssize_t AMIDI_API AMidiInputPort_send(
  const AMidiInputPort *inputPort,
  const uint8_t *buffer,
  size_t numBytes
)

将数据发送到指定的输入端口。

另请参阅:AMEDIA_ERROR_INVALID_PARAMETER - 指定的端口为 NULL,指定的缓冲区为 NULL

详细信息
参数
inputPort
要发送数据的端口标识符。
buffer
指向包含要发送数据的字节数组。
numBytes
指定要写入的字节数。
返回值
已发送的字节数,可能少于指定的字节数,或负值错误代码

AMidiInputPort_sendFlush

声明位于 amidi/AMidi.h
media_status_t AMIDI_API AMidiInputPort_sendFlush(
  const AMidiInputPort *inputPort
)

将包含“MIDI 刷新命令代码”的消息发送到指定的端口。

这应该会导致接收器丢弃可能已积累但尚未处理的任何待处理 MIDI 数据。

另请参阅:AMEDIA_OK 如果成功,否则返回负值错误代码:另请参阅:AMEDIA_ERROR_INVALID_PARAMETER - 指定的端口为 NULL另请参阅:AMEDIA_ERROR_UNSUPPORTED - 无法发送 FLUSH 命令。

详细信息
参数
inputPort
要发送刷新命令的端口标识符。
返回值

AMidiInputPort_sendWithTimestamp

声明位于 amidi/AMidi.h
ssize_t AMIDI_API AMidiInputPort_sendWithTimestamp(
  const AMidiInputPort *inputPort,
  const uint8_t *buffer,
  size_t numBytes,
  int64_t timestamp
)

将带有时间戳的数据发送到指定的输入端口。

另请参阅:AMEDIA_ERROR_INVALID_PARAMETER - 指定的端口为 NULL,指定的缓冲区为 NULL

详细信息
参数
inputPort
要发送数据的端口标识符。
buffer
指向包含要发送数据的字节数组。
numBytes
指定要写入的字节数。
timestamp
与发送数据关联的 CLOCK_MONOTONIC 时间,单位为纳秒。
返回值
已发送的字节数,可能少于指定的字节数,或负值错误代码

AMidiOutputPort_close

声明位于 amidi/AMidi.h
void AMIDI_API AMidiOutputPort_close(
  const AMidiOutputPort *outputPort
)

关闭输出端口。

详细信息
参数
outputPort
端口的原生 API 端口标识符。

AMidiOutputPort_open

声明位于 amidi/AMidi.h
media_status_t AMIDI_API AMidiOutputPort_open(
  const AMidiDevice *device,
  int32_t portNumber,
  AMidiOutputPort **outOutputPortPtr
)

打开输出端口,以便客户端可以从中接收数据。

在为返回的 AMidiOutputPort 调用 AMidiOutputPort_close() 之前,该端口将保持打开和有效状态。

另请参阅:AMEDIA_ERROR_UNKNOWN - 未知错误。

详细信息
参数
device
指定 MIDI 设备。
portNumber
指定设备上要打开的从零开始的端口索引。该值的范围是 0 到 AMidiDevice_getNumOutputPorts 函数报告的输出端口数量减 1 之间的值。
outOutputPortPtr
接收打开端口的原生 API 端口标识符。
返回值
AMEDIA_OK,或负值错误代码

AMidiOutputPort_receive

声明位于 amidi/AMidi.h
ssize_t AMIDI_API AMidiOutputPort_receive(
  const AMidiOutputPort *outputPort,
  int32_t *opcodePtr,
  uint8_t *buffer,
  size_t maxBytes,
  size_t *numBytesReceivedPtr,
  int64_t *outTimestampPtr
)

接收下一个待处理的 MIDI 消息。

为了检索所有待处理的消息,客户端应重复调用此方法,直到它返回 0。

请注意,这是一个非阻塞调用。如果没有可用的 Midi 消息,该函数会立即返回 0(表示收到 0 条消息)。

另请参阅:AMEDIA_ERROR_UNKNOWN - 未知错误。

详细信息
参数
outputPort
标识要从中接收消息的端口。
opcodePtr
接收消息操作码 (Op Code)。
buffer
指向用于接收消息数据字节的缓冲区。
maxBytes
指定 buffer 参数指向的缓冲区大小。
numBytesReceivedPtr
退出时,接收存储在 buffer 中的实际字节数。
outTimestampPtr
如果非 NULL,接收与消息关联的时间戳(运行中的 Java 虚拟机高分辨率时间源的当前值,单位为纳秒)。
返回值
接收到的消息数量(0 或 1),或负值错误代码