Module java.desktop
Package javax.sound.midi

Class SysexMessage

java.lang.Object
javax.sound.midi.MidiMessage
javax.sound.midi.SysexMessage
所有已实现的接口:
Cloneable

public class SysexMessage extends MidiMessage
一个SysexMessage对象表示一个MIDI系统独占消息。

当从MIDI文件中读取系统独占消息时,它总是具有定义的长度。来自MIDI文件的系统独占消息的数据应该按照以下方式存储在SysexMessage的数据数组中:系统独占消息状态字节(0xF0或0xF7),所有消息数据字节,最后是独占结束标志(0xF7)。因此,SysexMessage对象报告的长度是系统独占数据的长度加上两个字节:一个字节用于状态字节,另一个用于独占结束标志。

根据标准MIDI文件规范,从MIDI文件中读取的SysexMessage有两个合法的状态字节值:

  • 0xF0:系统独占消息(与MIDI线协议中相同)
  • 0xF7:特殊系统独占消息
当使用Java Sound处理使用MIDI线协议接收的系统独占数据时,它应该将数据放置在一个或多个SysexMessages中。在这种情况下,系统独占数据的长度事先是未知的;系统独占数据的结束由MIDI线字节流中的独占结束标志(0xF7)标记。
  • 0xF0:系统独占消息(与MIDI线协议中相同)
  • 0xF7:独占结束(EOX)
包含特定系统独占消息数据的第一个SysexMessage对象应该具有状态值0xF0。如果此消息包含消息的所有系统独占数据,则应以状态字节0xF7(EOX)结束。否则,应该在一个或多个具有状态值0xF7的SysexMessages中发送额外的系统独占数据。包含系统独占消息的最后一部分数据的SysexMessage应以值0xF7(EOX)结束,以标记系统独占消息的结束。

如果使用SysexMessages对象传输系统独占数据使用MIDI线协议,则应仅传播初始0xF0状态字节,系统独占数据本身以及最终的0xF7(EOX)字节;用于指示SysexMessage包含继续系统独占数据的任何0xF7状态字节不应通过MIDI线协议传播。

  • Field Summary

    Fields
    Modifier and Type
    Field
    Description
    static final int
    特殊系统独占消息的状态字节(0xF7,或247),用于MIDI文件。
    static final int
    系统独占消息的状态字节(0xF0,或240)。

    Fields declared in class javax.sound.midi.MidiMessage

    data, length
  • Constructor Summary

    Constructors
    Modifier
    Constructor
    Description
     
    构造一个新的SysexMessage
    protected
    SysexMessage(byte[] data)
    构造一个新的SysexMessage
     
    SysexMessage(byte[] data, int length)
    构造一个新的SysexMessage并设置消息的数据。
     
    SysexMessage(int status, byte[] data, int length)
    构造一个新的SysexMessage并设置消息的数据。
  • Method Summary

    Modifier and Type
    Method
    Description
    clone()
    创建一个与此对象相同类和相同内容的新对象。
    byte[]
    获取系统独占消息的数据的副本。
    void
    setMessage(byte[] data, int length)
    设置系统独占消息的数据。
    void
    setMessage(int status, byte[] data, int length)
    设置系统独占消息的数据。

    Methods declared in class javax.sound.midi.MidiMessage

    getLength, getMessage, getStatus

    Methods declared in class java.lang.Object

    equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • Field Details

    • SYSTEM_EXCLUSIVE

      public static final int SYSTEM_EXCLUSIVE
      系统独占消息的状态字节(0xF0,或240)。
      参见:
    • SPECIAL_SYSTEM_EXCLUSIVE

      public static final int SPECIAL_SYSTEM_EXCLUSIVE
      特殊系统独占消息的状态字节(0xF7,或247),用于MIDI文件。它具有与实时“MIDI线”协议中使用的END_OF_EXCLUSIVE相同的值。
      参见:
  • Constructor Details

    • SysexMessage

      public SysexMessage()
      构造一个新的SysexMessage。新消息的内容保证指定为有效的MIDI消息。随后,您可以使用setMessage方法之一设置消息的内容。
      参见:
    • SysexMessage

      public SysexMessage(byte[] data, int length) throws InvalidMidiDataException
      构造一个新的SysexMessage并设置消息的数据。数据数组的第一个字节必须是有效的系统独占状态字节(0xF0或0xF7)。消息的内容可以通过使用setMessage方法之一更改。
      参数:
      data - 包含状态字节的系统独占消息数据
      length - 数组中有效消息数据的长度,包括状态字节;它应为非负数且小于或等于data.length
      抛出:
      InvalidMidiDataException - 如果参数值未指定有效的MIDI元消息
      自:
      1.7
      参见:
    • SysexMessage

      public SysexMessage(int status, byte[] data, int length) throws InvalidMidiDataException
      构造一个新的SysexMessage并设置消息的数据。消息的内容可以通过使用setMessage方法之一更改。
      参数:
      status - 消息的状态字节;它必须是有效的系统独占状态字节(0xF0或0xF7)
      data - 系统独占消息数据(不包括状态字节)
      length - 数组中有效消息数据的长度;它应为非负数且小于或等于data.length
      抛出:
      InvalidMidiDataException - 如果参数值未指定有效的MIDI系统独占消息
      自:
      1.7
      参见:
    • SysexMessage

      protected SysexMessage(byte[] data)
      构造一个新的SysexMessage
      参数:
      data - 包含完整消息的字节数组。消息数据可以使用setMessage方法更改。
      参见:
  • Method Details

    • setMessage

      public void setMessage(byte[] data, int length) throws InvalidMidiDataException
      设置系统独占消息的数据。数据数组的第一个字节必须是有效的系统独占状态字节(0xF0或0xF7)。
      覆盖:
      setMessage 在类 MidiMessage
      参数:
      data - 系统独占消息数据
      length - 数组中有效消息数据的长度,包括状态字节
      抛出:
      InvalidMidiDataException - 如果参数值未指定有效的MIDI系统独占消息
    • setMessage

      public void setMessage(int status, byte[] data, int length) throws InvalidMidiDataException
      设置系统独占消息的数据。
      参数:
      status - 消息的状态字节(0xF0或0xF7)
      data - 系统独占消息数据
      length - 数组中有效消息数据的长度
      抛出:
      InvalidMidiDataException - 如果状态字节对于系统独占消息无效
    • getData

      public byte[] getData()
      获取系统独占消息的数据的副本。返回的字节数组不包括状态字节。
      返回:
      包含系统独占消息数据的数组
    • clone

      public Object clone()
      创建一个与此对象相同类和相同内容的新对象。
      指定者:
      clone 在类 MidiMessage
      返回:
      此实例的克隆
      参见: