javax.sound.midi

接口
异常
java.lang.Object
  继承者 javax.sound.midi.MidiMessage
      继承者 javax.sound.midi.SysexMessage
所有已实现的接口:
Cloneable

public class SysexMessage
     
extends MidiMessage

表示 MIDI 系统独占消息 SysexMessage 对象。

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

按照 Standard MIDI Files 规范的规定,有两个状态字节值对于从 MIDI 文件读取的 SysexMessage 是合法的:

  • 0xF0:系统独占消息(与 MIDI 导线协议相同)
  • 0xF7:特殊系统独占消息

当使用 Java Sound 处理通过 MIDI 导线协议接收的系统独占数据时,它应将数据置于一个或多个 SysexMessage 中。在这种情况下,预先不知道系统独占数据的长度;系统独占数据的结束由 MIDI 导线字节流中的一个独占结束标志 (0xF7) 所标记。

  • 0xF0:系统独占消息(与 MIDI 导线协议相同)
  • 0xF7:独占结束 (EOX)
第一个包含用于特定系统独占消息数据的 SysexMessage 对象应有状态值 0xF0。如果此消息包含该消息的所有系统独占数据,则它应以状态字节 0xF7 (EOX) 结束。否则,应在一个或多个 SysexMessage 中发送其他的系统独占数据,状态值为 0xF7。包含系统独占消息最后数据的 SysexMessage 应以 0xF7 (EOX) 值结束,以标记系统独占消息的结束。

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


字段摘要
static int SPECIAL_SYSTEM_EXCLUSIVE
          用于 SPECIAL_SYSTEM_EXCLUSIVE 消息的状态字节(0xF7 或 247),供在 MIDI 文件中使用。
static int SYSTEM_EXCLUSIVE
          用于 SYSTEM_EXCLUSIVE 消息的状态字节(0xF0 或 240)。
 
从类 javax.sound.midi.MidiMessage 继承的字段
data, length
 
构造方法摘要
  SysexMessage()
          构造一个新的 SysexMessage
protected SysexMessage(byte[] data)
          构造一个新的 SysexMessage
 
方法摘要
 Object clone()
          创建一个与此对象具有相同类和相同内容的新对象。
 byte[] getData()
          获得系统独占消息数据的副本。
 void setMessage(byte[] data, int length)
          为系统独占消息设置数据。
 void setMessage(int status, byte[] data, int length)
          为系统独占消息设置数据。
 
从类 javax.sound.midi.MidiMessage 继承的方法
getLength, getMessage, getStatus
 
从类 java.lang.Object 继承的方法
equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

字段详细信息

SYSTEM_EXCLUSIVE

public static final int SYSTEM_EXCLUSIVE
用于 SYSTEM_EXCLUSIVE 消息的状态字节(0xF0 或 240)。

另请参见:
MidiMessage.getStatus(), 常量字段值

SPECIAL_SYSTEM_EXCLUSIVE

public static final int SPECIAL_SYSTEM_EXCLUSIVE
用于 SPECIAL_SYSTEM_EXCLUSIVE 消息的状态字节(0xF7 或 247),供在 MIDI 文件中使用。它与 END_OF_EXCLUSIVE 具有相同的值,用于实时 "MIDI wire" 协议中。

另请参见:
MidiMessage.getStatus(), 常量字段值
构造方法详细信息

SysexMessage

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

另请参见:
setMessage(byte[], int)

SysexMessage

protected SysexMessage(byte[] data)
构造一个新的 SysexMessage

参数:
data - 包含完整消息的 byte 数组。使用 setMessage 方法可更改消息数据。
另请参见:
setMessage(byte[], int)
方法详细信息

setMessage

public void setMessage(byte[] data,
                       int length)
                throws InvalidMidiDataException
为系统独占消息设置数据。数据数组的第一个字节必须是一个有效的系统独占状态字节(0xF0 或 0xF7)。

覆盖:
MidiMessage 中的 setMessage
参数:
data - 系统独占消息数据
length - 数组中有效消息数据的长度,包含状态字节。
抛出:
InvalidMidiDataException

setMessage

public void setMessage(int status,
                       byte[] data,
                       int length)
                throws InvalidMidiDataException
为系统独占消息设置数据。

参数:
status - 消息的状态字节(0xF0 或 0xF7)
data - 系统独占消息数据
length - 数组中有效消息数据的长度
抛出:
InvalidMidiDataException

getData

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

返回:
包含系统独占消息数据的数组。

clone

public Object clone()
创建一个与此对象具有相同类和相同内容的新对象。

指定者:
MidiMessage 中的 clone
返回:
此实例的一个副本。
另请参见:
Cloneable