Frage

Ich mache einige Arbeit mit dem Javasound-API eine MIDI System Exclusive (SysEx) Nachricht an ein externen MIDI-Gerät (eine elektronische Tastatur) zu senden. Nach dem Yamaha Handbuch ist die Daten zu leuchten einer der Schlüssel zu senden diese Serie von Bytes. F0 43 7F 00 00 03 00 41 F7

Nach der JavaDoc auf SysexMessage, die richtige Art und Weise Daten für eine Nachricht zu senden ist mit setMessage(int status, byte[] data, int length). In diesem Fall F0 (oder 240 dezimal) ist der Status, und alles andere ist die Daten -. Einschließlich der F7 (247 dezimal) am Ende, die das Ende der Sysex Meldung zeigt

Das Problem ist, dass Bytes in Java auf den Bereich begrenzt ist -128..127, so dass ich nicht F7 in einem Byte-Array senden. Aber die JavaDoc für SysexMessage scheint diese Tatsache nicht bewusst, sagte: „Wenn diese Meldung enthält alle System-Exklusiv-Daten für die Nachricht, sollte es mit der Status-Byte 0xF7 beenden.“

Haben Sie Vorschläge für, wie man richtig, dass die letzte Byte schicken? Bin ich die JavaDoc für SysexMessage falsch interpretiert?

War es hilfreich?

Lösung

Sie denken über die Zahl F7 der falsche Weg. Während F7 das Äquivalent zu 247 ist, ist es auch -9. Aber ob Sie F7 interpretieren die Nummer 247 (als Byte ohne Vorzeichen) zu sein oder die Zahl sein -9 (als Byte mit Vorzeichen) es ist immer noch die gleiche Folge von Bits 11110111, und wenn diese Sequenz von Bits über die Leitung übertragen auf Ihre Tastatur, interpretiert die Tastatur kann jedoch mag es.

Andere Tipps

Für diese Art von Problem können Sie einen beliebigen ganzzahligen Wert sicher werfen weniger als oder gleich 255 (0xFF) zu einem Byte. Der Grund dafür ist, wie Jessup angegeben, werden sie durch das gleiche Bitmuster dargestellt werden.

int i = 0xF7;
byte b = (byte)i;
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top