SysEx不会发送字节“AD”

好的,在两个不同的系统(Mac和PC)上用两种不同的语言(Java和Cocoa)编写的两个不同的程序(我自己的和QLab)尝试这样做会产生相同的结果。 所以我很难过

本质上,我试图发送以下Sysex消息:

F0 43 10 3E 12 01 00 33 00 00 00 00 AD 00 00 00 AD F7 

而当我发送它的时候,我的Midi监控程序(又是两个不同的程序)要么发送这个消息:

 F0 43 10 3E 12 01 00 33 00 00 00 00 F7 

然后这发送:

 Aftertouch Ch14 C-2 0 Invalid 1 Byte Invalid 1 Byte 

或者另一个只是说三个后面的,然后是从Javaclosures的通道。

那么,只是在Mac程序的故障排除,我发出以下消息:

 F0 43 10 3E 12 01 00 33 00 00 00 00 00 00 00 00 AD F7 

它说,我发送这个:

 F0 43 10 3E 12 01 00 33 00 00 00 00 00 00 00 00 F7 

然后这个:

 Invalid 1 Byte 

如果有帮助,我试图发送消息kInputFader的雅马哈LS9。

Sysex不喜欢AD字节吗?

MIDI大多只有7位

看看这张表: http : //midi.org/techspecs/midimessages.php

正如它所说的,系统信息消息

  • F0开始
  • 可能只包含在[00 .. 7F]范围内的字节
  • 除了结束SysEx消息的F7外。

MIDI大多是以字节发送的7位编码。 只有消息的起始字节等少数特殊字节才具有高位设置。

当控制器支持超出[0..127]范围的值时,该值需要分成多个字节。

确定范围

下表有助于确定范围。

  Range |Data|Bytes unsigned | signed |Bits|req'd ------------------+---------------------------+----+------ 0 .. 127 | -64 .. 63 | 7 | 1 0 .. 16383 | -8192 .. 8191 | 14 | 2 0 .. 2097151 | -1048576 .. 1048575 | 21 | 3 0 .. 134217728 | -67108864 .. 67108863 | 26 | 4 0 .. 17179869184 | -8589934592 .. 8589934591 | 34 | 5 

意义在于特定控制器支持的值范围,而不是实际值。 例如,如果控制器支持值范围[0..1023] ,则总是需要2个字节,即使要发送的值是0也只需要一个字节。

确定Java程序中的长度

如果您知道maxValue ,则可以使用以下算法确定长度:

 public static int getDataLengthUnsigned(final int maxValue) { int ret = 1; while ((1 << (ret * 7)) <= maxValue) ret++; return ret; } 

int转换为MIDI的byte[]

这假定您的MIDI设备在Little Endian格式的信息上操作。 通常这是因为MIDI信息Pitch Bend是LSB第一。 也许规范甚至说什么东西应该是Little Endian,我不知道。

 public static byte[] encodeAsSysExUnsigned(int value, final int maxValue) { if (value > maxValue || value < 0) throw new IllegalArgumentException(String.format("Value %d out of range [0 .. %d]", value, maxValue)); final int dataLength = getDataLengthUnsigned(maxValue); final byte[] sysExData = new byte[dataLength]; for (int i = 0; i < dataLength; i++, value >>>= 7) sysExData[i] = (byte) (value & 0x7F); return sysExData; } 

好吧,忘了一分钟,这是MIDI。 请纠正我,如果我错了,但除了标题,Sysex消息只能包含00-7F(0-127十二月)。

来源: http : //beatwise.proboards.com/thread/1705/sysex-hardware-clips-help