javax.sound.midi
public class: MetaMessage [javadoc |
source]
java.lang.Object
javax.sound.midi.MidiMessage
javax.sound.midi.MetaMessage
All Implemented Interfaces:
Cloneable
Direct Known Subclasses:
ImmutableEndOfTrack
A
MetaMessage is a
MidiMessage that is not meaningful to synthesizers, but
that can be stored in a MIDI file and interpreted by a sequencer program.
(See the discussion in the
MidiMessage
class description.) The Standard MIDI Files specification defines
various types of meta-events, such as sequence number, lyric, cue point,
and set tempo. There are also meta-events
for such information as lyrics, copyrights, tempo indications, time and key
signatures, markers, etc. For more information, see the Standard MIDI Files 1.0
specification, which is part of the Complete MIDI 1.0 Detailed Specification
published by the MIDI Manufacturer's Association
(
http://www.midi.org).
When data is being transported using MIDI wire protocol,
a ShortMessage with the status value 0xFF represents
a system reset message. In MIDI files, this same status value denotes a MetaMessage.
The types of meta-message are distinguished from each other by the first byte
that follows the status byte 0xFF. The subsequent bytes are data
bytes. As with system exclusive messages, there are an arbitrary number of
data bytes, depending on the type of MetaMessage.
| Field Summary |
|---|
| public static final int | META | Status byte for MetaMessage (0xFF, or 255), which is used
in MIDI files. It has the same value as SYSTEM_RESET, which
is used in the real-time "MIDI wire" protocol.Also see:
- MidiMessage#getStatus
|
| Methods from java.lang.Object: |
|---|
|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
| Method from javax.sound.midi.MetaMessage Detail: |
public Object clone() {
byte[] newData = new byte[length];
System.arraycopy(data, 0, newData, 0, newData.length);
MetaMessage event = new MetaMessage(newData);
return event;
}
Creates a new object of the same class and with the same contents
as this object. |
public byte[] getData() {
byte[] returnedArray = new byte[dataLength];
System.arraycopy(data, (length - dataLength), returnedArray, 0, dataLength);
return returnedArray;
}
Obtains a copy of the data for the meta message. The returned
array of bytes does not include the status byte or the message
length data. The length of the data for the meta message is
the length of the array. Note that the length of the entire
message includes the status byte and the meta message type
byte, and therefore may be longer than the returned array. |
public int getType() {
if (length >=2) {
return data[1] & 0xFF;
}
return 0;
}
Obtains the type of the MetaMessage. |
public void setMessage(int type,
byte[] data,
int length) throws InvalidMidiDataException {
if (type >= 128 || type < 0) {
throw new InvalidMidiDataException("Invalid meta event with type " + type);
}
if ((length > 0 && length > data.length) || length < 0) {
throw new InvalidMidiDataException("length out of bounds: "+length);
}
this.length = 2 + getVarIntLength(length) + length;
this.dataLength = length;
this.data = new byte[this.length];
this.data[0] = (byte) META; // status value for MetaMessages (meta events)
this.data[1] = (byte) type; // MetaMessage type
writeVarInt(this.data, 2, length); // write the length as a variable int
if (length > 0) {
System.arraycopy(data, 0, this.data, this.length - this.dataLength, this.dataLength);
}
}
Sets the message parameters for a MetaMessage.
Since only one status byte value, 0xFF, is allowed for meta-messages,
it does not need to be specified here. Calls to getStatus return
0xFF for all meta-messages.
The type argument should be a valid value for the byte that
follows the status byte in the MetaMessage. The data argument
should contain all the subsequent bytes of the MetaMessage. In other words,
the byte that specifies the type of MetaMessage is not considered a data byte. |