将大于127的字节发送到Java Sound的SysexMessage时出现问题

时间:2010-04-01 13:42:46

标签: java midi

我正在使用JavaSound API进行一些工作,将MIDI System Exclusive(Sysex)消息发送到外部MIDI设备(电子键盘)。根据Yamaha手册,要发送其中一个键的数据是这一系列字节:F0 43 7F 00 00 03 00 41 F7。

根据SysexMessage上的JavaDoc,发送消息数据的正确方法是使用setMessage(int status, byte[] data, int length)。在这种情况下,F0(或240十进制)是状态,其他一切都是数据 - 包括末尾的F7(十进制247),表示Sysex消息的结束。

问题是Java中的字节数限制在-128..127范围内,因此我无法在字节数组中发送F7。但是SysexMessage的JavaDoc似乎没有注意到这个事实,他说,“如果这条消息包含消息的所有系统独占数据,它应该以状态字节0xF7结束。”

有关如何正确发送最后一个字节的任何建议?我是否误解了SyDxMessage的JavaDoc?

2 个答案:

答案 0 :(得分:3)

你正在考虑数字F7错误的方式。虽然F7相当于247,但它也是-9。但是,无论您将F7解释为数字247(作为无符号字节)还是数字-9(作为有符号字节),它仍然是相同的位序列11110111,并且当该位序列通过线路传输时对于键盘,键盘可能会解释它喜欢的。

答案 1 :(得分:1)

对于这种问题,您可以安全地将小于或等于255(0xFF)的任何整数值强制转换为一个字节。原因是,正如Jessup所说,它们将由相同的位模式表示。

int i = 0xF7;
byte b = (byte)i;