模块  java.desktop
软件包  javax.sound.midi

Class 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)结束,以标记系统独占消息的结束。

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

    • 字段详细信息

      • SPECIAL_SYSTEM_EXCLUSIVE

        public static final int SPECIAL_SYSTEM_EXCLUSIVE
        特殊系统专用消息(0xF7或247)的状态字节,用于MIDI文件。 它与END_OF_EXCLUSIVE具有相同的值,用于实时“MIDI线”协议。
        另请参见:
        MidiMessage.getStatus()常数字段值
    • 构造方法详细信息

      • SysexMessage

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

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

        public SysexMessage​(int status,
                            byte[] data,
                            int length)
                     throws InvalidMidiDataException
        构造一个新的SysexMessage并设置消息的数据。 可以使用setMessage方法之一更改消息的内容。
        参数
        status - 消息的状态字节; 它必须是有效的系统独占状态字节(0xF0或0xF7)
        data - 系统独占消息数据(没有状态字节)
        length - 数组中有效消息数据的长度; 它应该是非负的且小于或等于data.length
        异常
        InvalidMidiDataException - 如果参数值未指定有效的MIDI系统专用消息
        从以下版本开始:
        1.7
        另请参见:
        setMessage(byte[], int)setMessage(int, byte[], int)getData()
      • SysexMessage

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

      • 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()
        创建与此对象具有相同类并具有相同内容的新对象。
        Specified by:
        clone在类 MidiMessage
        结果
        这个实例的克隆
        另请参见:
        Cloneable