我正在使用 JavaSound API 进行一些工作,以将 MIDI 系统专用 (Sysex) 消息发送到外部 MIDI 设备(电子键盘)。根据雅马哈手册,要发送点亮其中一个按键的数据是这一系列字节: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 结尾。”
关于如何正确发送最后一个字节有什么建议吗?我是否误解了 SysexMessage 的 JavaDoc?
最佳答案
您对数字 F7 的思考方式是错误的。虽然 F7 相当于 247,但它也是 -9。但是,无论您将 F7 解释为数字 247(作为无符号字节)还是数字 -9(作为有符号字节),它仍然是相同的位序列 11110111,并且当该位序列通过线路传输时对于您的键盘,键盘可以根据需要进行解释。
关于java - 向 Java Sound 的 SysexMessage 发送大于 127 的字节时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2560749/