java - 向 Java Sound 的 SysexMessage 发送大于 127 的字节时出现问题

标签 java midi

我正在使用 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/

相关文章:

python - 如何使用python根据音符音高分割midi文件?

java - JFugue解析器异常在duration的值,在 'notes sharing same duration'的情况下

python - Mac 上 Python 中的 MIDI 程序没有声音

用于实时音频合成的 C++ 精确 44100Hz 时钟

java - 如何将变量传递给 Pepper-Box 纯文本配置

java - 在Java中解析字符串以提取数据

midi - 使用 OpenAL 和 SF2 以编程方式播放 MIDI

列表中列表的Java 8 Stream过滤值

Java 正则表达式组

Java字符串数组初始化循环结构内外