Module  java.desktop
软件包  javax.sound.midi

Class SysexMessage

  • All Implemented Interfaces:
    Cloneable


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

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

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

    • 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)字节); 用于指示包含连续系统专用数据的SysexMessage任何0xF7状态字节不应通过MIDI线路协议传播。

    • 字段详细信息

      • SPECIAL_SYSTEM_EXCLUSIVE

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

      • 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)。
        重写:
        setMessageMidiMessage
        参数
        data - 系统专用消息数据
        length - 数组中有效消息数据的长度,包括状态字节
        异常
        InvalidMidiDataException - 如果参数值未指定有效的MIDI元消息
      • setMessage

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

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

        public Object clone​()
        创建与该对象相同的类和新内容相同的新对象。
        Specified by:
        cloneMidiMessage
        结果
        这个实例的一个克隆
        另请参见:
        Cloneable