JavaSound APIを使用して、MIDIシステムエクスクルーシブ(Sysex)メッセージを外部MIDIデバイス(電子キーボード)に送信しています。ヤマハのマニュアルによると、キーの1つを点灯させるために送信するデータは、次の一連のバイトです:F0 43 7F 00 00 03 0041F7。
SysexMessageのJavaDocによると、メッセージのデータを送信する正しい方法は。を使用することsetMessage(int status, byte[] data, int length)
です。この場合、F0(または10進数で240)がステータスであり、その他すべてがデータです。これには、Sysexメッセージの終わりを示す最後のF7(10進数で247)が含まれます。
問題は、Javaのバイトが-128..127の範囲に制限されているため、F7をバイト配列で送信できないことです。しかし、JavaDoc for SysexMessageはこの事実に気づいていないようで、「このメッセージにメッセージのシステム専用データがすべて含まれている場合は、ステータスバイト0xF7で終了する必要があります」と述べています。
その最後のバイトを正しく送信する方法についての提案はありますか?SysexMessageのJavaDocを誤って解釈していますか?