src/java.desktop/share/classes/javax/sound/midi/SysexMessage.java
author serb
Fri, 22 Jun 2018 19:19:43 -0700
changeset 50832 e069b9e49ca7
parent 47216 71c04702a3d5
child 54506 8b3b89320d03
permissions -rw-r--r--
8205456: Unification of iterations over arrays Reviewed-by: prr
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
     1
/*
50832
e069b9e49ca7 8205456: Unification of iterations over arrays
serb
parents: 47216
diff changeset
     2
 * Copyright (c) 1998, 2018, Oracle and/or its affiliates. All rights reserved.
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
     3
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
90ce3da70b43 Initial load
duke
parents:
diff changeset
     4
 *
90ce3da70b43 Initial load
duke
parents:
diff changeset
     5
 * This code is free software; you can redistribute it and/or modify it
90ce3da70b43 Initial load
duke
parents:
diff changeset
     6
 * under the terms of the GNU General Public License version 2 only, as
5506
202f599c92aa 6943119: Rebrand source copyright notices
ohair
parents: 2651
diff changeset
     7
 * published by the Free Software Foundation.  Oracle designates this
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
     8
 * particular file as subject to the "Classpath" exception as provided
5506
202f599c92aa 6943119: Rebrand source copyright notices
ohair
parents: 2651
diff changeset
     9
 * by Oracle in the LICENSE file that accompanied this code.
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
    10
 *
90ce3da70b43 Initial load
duke
parents:
diff changeset
    11
 * This code is distributed in the hope that it will be useful, but WITHOUT
90ce3da70b43 Initial load
duke
parents:
diff changeset
    12
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
90ce3da70b43 Initial load
duke
parents:
diff changeset
    13
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
90ce3da70b43 Initial load
duke
parents:
diff changeset
    14
 * version 2 for more details (a copy is included in the LICENSE file that
90ce3da70b43 Initial load
duke
parents:
diff changeset
    15
 * accompanied this code).
90ce3da70b43 Initial load
duke
parents:
diff changeset
    16
 *
90ce3da70b43 Initial load
duke
parents:
diff changeset
    17
 * You should have received a copy of the GNU General Public License version
90ce3da70b43 Initial load
duke
parents:
diff changeset
    18
 * 2 along with this work; if not, write to the Free Software Foundation,
90ce3da70b43 Initial load
duke
parents:
diff changeset
    19
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
90ce3da70b43 Initial load
duke
parents:
diff changeset
    20
 *
5506
202f599c92aa 6943119: Rebrand source copyright notices
ohair
parents: 2651
diff changeset
    21
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
202f599c92aa 6943119: Rebrand source copyright notices
ohair
parents: 2651
diff changeset
    22
 * or visit www.oracle.com if you need additional information or have any
202f599c92aa 6943119: Rebrand source copyright notices
ohair
parents: 2651
diff changeset
    23
 * questions.
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
    24
 */
90ce3da70b43 Initial load
duke
parents:
diff changeset
    25
90ce3da70b43 Initial load
duke
parents:
diff changeset
    26
package javax.sound.midi;
90ce3da70b43 Initial load
duke
parents:
diff changeset
    27
90ce3da70b43 Initial load
duke
parents:
diff changeset
    28
/**
26003
d630c97424bd 8050852: Javadoc cleanup of javax.sound.midi package
serb
parents: 19207
diff changeset
    29
 * A {@code SysexMessage} object represents a MIDI system exclusive message.
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
    30
 * <p>
26003
d630c97424bd 8050852: Javadoc cleanup of javax.sound.midi package
serb
parents: 19207
diff changeset
    31
 * When a system exclusive message is read from a MIDI file, it always has a
d630c97424bd 8050852: Javadoc cleanup of javax.sound.midi package
serb
parents: 19207
diff changeset
    32
 * defined length. Data from a system exclusive message from a MIDI file should
d630c97424bd 8050852: Javadoc cleanup of javax.sound.midi package
serb
parents: 19207
diff changeset
    33
 * be stored in the data array of a {@code SysexMessage} as follows: the system
d630c97424bd 8050852: Javadoc cleanup of javax.sound.midi package
serb
parents: 19207
diff changeset
    34
 * exclusive message status byte (0xF0 or 0xF7), all message data bytes, and
d630c97424bd 8050852: Javadoc cleanup of javax.sound.midi package
serb
parents: 19207
diff changeset
    35
 * finally the end-of-exclusive flag (0xF7). The length reported by the
d630c97424bd 8050852: Javadoc cleanup of javax.sound.midi package
serb
parents: 19207
diff changeset
    36
 * {@code SysexMessage} object is therefore the length of the system exclusive
d630c97424bd 8050852: Javadoc cleanup of javax.sound.midi package
serb
parents: 19207
diff changeset
    37
 * data plus two: one byte for the status byte and one for the end-of-exclusive
d630c97424bd 8050852: Javadoc cleanup of javax.sound.midi package
serb
parents: 19207
diff changeset
    38
 * flag.
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
    39
 * <p>
26003
d630c97424bd 8050852: Javadoc cleanup of javax.sound.midi package
serb
parents: 19207
diff changeset
    40
 * As dictated by the Standard MIDI Files specification, two status byte values
d630c97424bd 8050852: Javadoc cleanup of javax.sound.midi package
serb
parents: 19207
diff changeset
    41
 * are legal for a {@code SysexMessage} read from a MIDI file:
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
    42
 * <ul>
47195
b309b58eb190 8181566: JavaSound javadoc clarification
serb
parents: 45012
diff changeset
    43
 *   <li>0xF0: System Exclusive message (same as in MIDI wire protocol)
b309b58eb190 8181566: JavaSound javadoc clarification
serb
parents: 45012
diff changeset
    44
 *   <li>0xF7: Special System Exclusive message
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
    45
 * </ul>
26003
d630c97424bd 8050852: Javadoc cleanup of javax.sound.midi package
serb
parents: 19207
diff changeset
    46
 * When Java Sound is used to handle system exclusive data that is being
d630c97424bd 8050852: Javadoc cleanup of javax.sound.midi package
serb
parents: 19207
diff changeset
    47
 * received using MIDI wire protocol, it should place the data in one or more
d630c97424bd 8050852: Javadoc cleanup of javax.sound.midi package
serb
parents: 19207
diff changeset
    48
 * {@code SysexMessages}. In this case, the length of the system exclusive data
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
    49
 * is not known in advance; the end of the system exclusive data is marked by an
90ce3da70b43 Initial load
duke
parents:
diff changeset
    50
 * end-of-exclusive flag (0xF7) in the MIDI wire byte stream.
90ce3da70b43 Initial load
duke
parents:
diff changeset
    51
 * <ul>
47195
b309b58eb190 8181566: JavaSound javadoc clarification
serb
parents: 45012
diff changeset
    52
 *   <li>0xF0: System Exclusive message (same as in MIDI wire protocol)
b309b58eb190 8181566: JavaSound javadoc clarification
serb
parents: 45012
diff changeset
    53
 *   <li>0xF7: End of Exclusive (EOX)
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
    54
 * </ul>
26003
d630c97424bd 8050852: Javadoc cleanup of javax.sound.midi package
serb
parents: 19207
diff changeset
    55
 * The first {@code SysexMessage} object containing data for a particular system
d630c97424bd 8050852: Javadoc cleanup of javax.sound.midi package
serb
parents: 19207
diff changeset
    56
 * exclusive message should have the status value 0xF0. If this message contains
d630c97424bd 8050852: Javadoc cleanup of javax.sound.midi package
serb
parents: 19207
diff changeset
    57
 * all the system exclusive data for the message, it should end with the status
d630c97424bd 8050852: Javadoc cleanup of javax.sound.midi package
serb
parents: 19207
diff changeset
    58
 * byte 0xF7 (EOX). Otherwise, additional system exclusive data should be sent
d630c97424bd 8050852: Javadoc cleanup of javax.sound.midi package
serb
parents: 19207
diff changeset
    59
 * in one or more {@code SysexMessages} with a status value of 0xF7. The
d630c97424bd 8050852: Javadoc cleanup of javax.sound.midi package
serb
parents: 19207
diff changeset
    60
 * {@code SysexMessage} containing the last of the data for the system exclusive
d630c97424bd 8050852: Javadoc cleanup of javax.sound.midi package
serb
parents: 19207
diff changeset
    61
 * message should end with the value 0xF7 (EOX) to mark the end of the system
d630c97424bd 8050852: Javadoc cleanup of javax.sound.midi package
serb
parents: 19207
diff changeset
    62
 * exclusive message.
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
    63
 * <p>
26003
d630c97424bd 8050852: Javadoc cleanup of javax.sound.midi package
serb
parents: 19207
diff changeset
    64
 * If system exclusive data from {@code SysexMessages} objects is being
d630c97424bd 8050852: Javadoc cleanup of javax.sound.midi package
serb
parents: 19207
diff changeset
    65
 * transmitted using MIDI wire protocol, only the initial 0xF0 status byte, the
d630c97424bd 8050852: Javadoc cleanup of javax.sound.midi package
serb
parents: 19207
diff changeset
    66
 * system exclusive data itself, and the final 0xF7 (EOX) byte should be
d630c97424bd 8050852: Javadoc cleanup of javax.sound.midi package
serb
parents: 19207
diff changeset
    67
 * propagated; any 0xF7 status bytes used to indicate that a
d630c97424bd 8050852: Javadoc cleanup of javax.sound.midi package
serb
parents: 19207
diff changeset
    68
 * {@code SysexMessage} contains continuing system exclusive data should not be
d630c97424bd 8050852: Javadoc cleanup of javax.sound.midi package
serb
parents: 19207
diff changeset
    69
 * propagated via MIDI wire protocol.
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
    70
 *
90ce3da70b43 Initial load
duke
parents:
diff changeset
    71
 * @author David Rivas
90ce3da70b43 Initial load
duke
parents:
diff changeset
    72
 * @author Kara Kytle
90ce3da70b43 Initial load
duke
parents:
diff changeset
    73
 * @author Florian Bomers
90ce3da70b43 Initial load
duke
parents:
diff changeset
    74
 */
90ce3da70b43 Initial load
duke
parents:
diff changeset
    75
public class SysexMessage extends MidiMessage {
90ce3da70b43 Initial load
duke
parents:
diff changeset
    76
90ce3da70b43 Initial load
duke
parents:
diff changeset
    77
    // Status byte defines
90ce3da70b43 Initial load
duke
parents:
diff changeset
    78
90ce3da70b43 Initial load
duke
parents:
diff changeset
    79
    /**
90ce3da70b43 Initial load
duke
parents:
diff changeset
    80
     * Status byte for System Exclusive message (0xF0, or 240).
26003
d630c97424bd 8050852: Javadoc cleanup of javax.sound.midi package
serb
parents: 19207
diff changeset
    81
     *
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
    82
     * @see MidiMessage#getStatus
90ce3da70b43 Initial load
duke
parents:
diff changeset
    83
     */
45012
4e9dedef0231 8178971: Uncommon formatting and typos in java.desktop module
serb
parents: 40444
diff changeset
    84
    public static final int SYSTEM_EXCLUSIVE = 0xF0; // 240
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
    85
90ce3da70b43 Initial load
duke
parents:
diff changeset
    86
    /**
26003
d630c97424bd 8050852: Javadoc cleanup of javax.sound.midi package
serb
parents: 19207
diff changeset
    87
     * Status byte for Special System Exclusive message (0xF7, or 247), which is
d630c97424bd 8050852: Javadoc cleanup of javax.sound.midi package
serb
parents: 19207
diff changeset
    88
     * used in MIDI files. It has the same value as END_OF_EXCLUSIVE, which is
d630c97424bd 8050852: Javadoc cleanup of javax.sound.midi package
serb
parents: 19207
diff changeset
    89
     * used in the real-time "MIDI wire" protocol.
d630c97424bd 8050852: Javadoc cleanup of javax.sound.midi package
serb
parents: 19207
diff changeset
    90
     *
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
    91
     * @see MidiMessage#getStatus
90ce3da70b43 Initial load
duke
parents:
diff changeset
    92
     */
45012
4e9dedef0231 8178971: Uncommon formatting and typos in java.desktop module
serb
parents: 40444
diff changeset
    93
    public static final int SPECIAL_SYSTEM_EXCLUSIVE = 0xF7; // 247
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
    94
26003
d630c97424bd 8050852: Javadoc cleanup of javax.sound.midi package
serb
parents: 19207
diff changeset
    95
    /**
d630c97424bd 8050852: Javadoc cleanup of javax.sound.midi package
serb
parents: 19207
diff changeset
    96
     * The data bytes for this system exclusive message. These are initialized
d630c97424bd 8050852: Javadoc cleanup of javax.sound.midi package
serb
parents: 19207
diff changeset
    97
     * to {@code null} and are set explicitly by
d630c97424bd 8050852: Javadoc cleanup of javax.sound.midi package
serb
parents: 19207
diff changeset
    98
     * {@link #setMessage(int, byte[], int, long) setMessage}.
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
    99
     */
90ce3da70b43 Initial load
duke
parents:
diff changeset
   100
    //protected byte[] data = null;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   101
90ce3da70b43 Initial load
duke
parents:
diff changeset
   102
    /**
26003
d630c97424bd 8050852: Javadoc cleanup of javax.sound.midi package
serb
parents: 19207
diff changeset
   103
     * Constructs a new {@code SysexMessage}. The contents of the new message
d630c97424bd 8050852: Javadoc cleanup of javax.sound.midi package
serb
parents: 19207
diff changeset
   104
     * are guaranteed to specify a valid MIDI message. Subsequently, you may set
d630c97424bd 8050852: Javadoc cleanup of javax.sound.midi package
serb
parents: 19207
diff changeset
   105
     * the contents of the message using one of the {@code setMessage} methods.
d630c97424bd 8050852: Javadoc cleanup of javax.sound.midi package
serb
parents: 19207
diff changeset
   106
     *
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   107
     * @see #setMessage
90ce3da70b43 Initial load
duke
parents:
diff changeset
   108
     */
90ce3da70b43 Initial load
duke
parents:
diff changeset
   109
    public SysexMessage() {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   110
        this(new byte[2]);
90ce3da70b43 Initial load
duke
parents:
diff changeset
   111
        // Default sysex message data: SOX followed by EOX
90ce3da70b43 Initial load
duke
parents:
diff changeset
   112
        data[0] = (byte) (SYSTEM_EXCLUSIVE & 0xFF);
90ce3da70b43 Initial load
duke
parents:
diff changeset
   113
        data[1] = (byte) (ShortMessage.END_OF_EXCLUSIVE & 0xFF);
90ce3da70b43 Initial load
duke
parents:
diff changeset
   114
    }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   115
2651
c6612086e8c9 5050147: RFE: Add More Useful Constructors to MidiMessage Subclasses
amenkov
parents: 2
diff changeset
   116
    /**
26003
d630c97424bd 8050852: Javadoc cleanup of javax.sound.midi package
serb
parents: 19207
diff changeset
   117
     * Constructs a new {@code SysexMessage} and sets the data for the message.
d630c97424bd 8050852: Javadoc cleanup of javax.sound.midi package
serb
parents: 19207
diff changeset
   118
     * The first byte of the data array must be a valid system exclusive status
d630c97424bd 8050852: Javadoc cleanup of javax.sound.midi package
serb
parents: 19207
diff changeset
   119
     * byte (0xF0 or 0xF7). The contents of the message can be changed by using
d630c97424bd 8050852: Javadoc cleanup of javax.sound.midi package
serb
parents: 19207
diff changeset
   120
     * one of the {@code setMessage} methods.
2651
c6612086e8c9 5050147: RFE: Add More Useful Constructors to MidiMessage Subclasses
amenkov
parents: 2
diff changeset
   121
     *
26003
d630c97424bd 8050852: Javadoc cleanup of javax.sound.midi package
serb
parents: 19207
diff changeset
   122
     * @param  data the system exclusive message data including the status byte
d630c97424bd 8050852: Javadoc cleanup of javax.sound.midi package
serb
parents: 19207
diff changeset
   123
     * @param  length the length of the valid message data in the array,
d630c97424bd 8050852: Javadoc cleanup of javax.sound.midi package
serb
parents: 19207
diff changeset
   124
     *         including the status byte; it should be non-negative and less
d630c97424bd 8050852: Javadoc cleanup of javax.sound.midi package
serb
parents: 19207
diff changeset
   125
     *         than or equal to {@code data.length}
d630c97424bd 8050852: Javadoc cleanup of javax.sound.midi package
serb
parents: 19207
diff changeset
   126
     * @throws InvalidMidiDataException if the parameter values do not specify a
32871
f013b86386e6 6646604: Typos in documentation
serb
parents: 26037
diff changeset
   127
     *         valid MIDI meta message
2651
c6612086e8c9 5050147: RFE: Add More Useful Constructors to MidiMessage Subclasses
amenkov
parents: 2
diff changeset
   128
     * @see #setMessage(byte[], int)
c6612086e8c9 5050147: RFE: Add More Useful Constructors to MidiMessage Subclasses
amenkov
parents: 2
diff changeset
   129
     * @see #setMessage(int, byte[], int)
c6612086e8c9 5050147: RFE: Add More Useful Constructors to MidiMessage Subclasses
amenkov
parents: 2
diff changeset
   130
     * @see #getData()
c6612086e8c9 5050147: RFE: Add More Useful Constructors to MidiMessage Subclasses
amenkov
parents: 2
diff changeset
   131
     * @since 1.7
c6612086e8c9 5050147: RFE: Add More Useful Constructors to MidiMessage Subclasses
amenkov
parents: 2
diff changeset
   132
     */
c6612086e8c9 5050147: RFE: Add More Useful Constructors to MidiMessage Subclasses
amenkov
parents: 2
diff changeset
   133
    public SysexMessage(byte[] data, int length)
c6612086e8c9 5050147: RFE: Add More Useful Constructors to MidiMessage Subclasses
amenkov
parents: 2
diff changeset
   134
            throws InvalidMidiDataException {
c6612086e8c9 5050147: RFE: Add More Useful Constructors to MidiMessage Subclasses
amenkov
parents: 2
diff changeset
   135
        super(null);
c6612086e8c9 5050147: RFE: Add More Useful Constructors to MidiMessage Subclasses
amenkov
parents: 2
diff changeset
   136
        setMessage(data, length);
c6612086e8c9 5050147: RFE: Add More Useful Constructors to MidiMessage Subclasses
amenkov
parents: 2
diff changeset
   137
    }
c6612086e8c9 5050147: RFE: Add More Useful Constructors to MidiMessage Subclasses
amenkov
parents: 2
diff changeset
   138
c6612086e8c9 5050147: RFE: Add More Useful Constructors to MidiMessage Subclasses
amenkov
parents: 2
diff changeset
   139
    /**
c6612086e8c9 5050147: RFE: Add More Useful Constructors to MidiMessage Subclasses
amenkov
parents: 2
diff changeset
   140
     * Constructs a new {@code SysexMessage} and sets the data for the message.
26003
d630c97424bd 8050852: Javadoc cleanup of javax.sound.midi package
serb
parents: 19207
diff changeset
   141
     * The contents of the message can be changed by using one of the
d630c97424bd 8050852: Javadoc cleanup of javax.sound.midi package
serb
parents: 19207
diff changeset
   142
     * {@code setMessage} methods.
2651
c6612086e8c9 5050147: RFE: Add More Useful Constructors to MidiMessage Subclasses
amenkov
parents: 2
diff changeset
   143
     *
26003
d630c97424bd 8050852: Javadoc cleanup of javax.sound.midi package
serb
parents: 19207
diff changeset
   144
     * @param  status the status byte for the message; it must be a valid system
d630c97424bd 8050852: Javadoc cleanup of javax.sound.midi package
serb
parents: 19207
diff changeset
   145
     *         exclusive status byte (0xF0 or 0xF7)
d630c97424bd 8050852: Javadoc cleanup of javax.sound.midi package
serb
parents: 19207
diff changeset
   146
     * @param  data the system exclusive message data (without the status byte)
d630c97424bd 8050852: Javadoc cleanup of javax.sound.midi package
serb
parents: 19207
diff changeset
   147
     * @param  length the length of the valid message data in the array; it
d630c97424bd 8050852: Javadoc cleanup of javax.sound.midi package
serb
parents: 19207
diff changeset
   148
     *         should be non-negative and less than or equal to
d630c97424bd 8050852: Javadoc cleanup of javax.sound.midi package
serb
parents: 19207
diff changeset
   149
     *         {@code data.length}
d630c97424bd 8050852: Javadoc cleanup of javax.sound.midi package
serb
parents: 19207
diff changeset
   150
     * @throws InvalidMidiDataException if the parameter values do not specify a
47195
b309b58eb190 8181566: JavaSound javadoc clarification
serb
parents: 45012
diff changeset
   151
     *         valid MIDI system exclusive message
2651
c6612086e8c9 5050147: RFE: Add More Useful Constructors to MidiMessage Subclasses
amenkov
parents: 2
diff changeset
   152
     * @see #setMessage(byte[], int)
c6612086e8c9 5050147: RFE: Add More Useful Constructors to MidiMessage Subclasses
amenkov
parents: 2
diff changeset
   153
     * @see #setMessage(int, byte[], int)
c6612086e8c9 5050147: RFE: Add More Useful Constructors to MidiMessage Subclasses
amenkov
parents: 2
diff changeset
   154
     * @see #getData()
c6612086e8c9 5050147: RFE: Add More Useful Constructors to MidiMessage Subclasses
amenkov
parents: 2
diff changeset
   155
     * @since 1.7
c6612086e8c9 5050147: RFE: Add More Useful Constructors to MidiMessage Subclasses
amenkov
parents: 2
diff changeset
   156
     */
c6612086e8c9 5050147: RFE: Add More Useful Constructors to MidiMessage Subclasses
amenkov
parents: 2
diff changeset
   157
    public SysexMessage(int status, byte[] data, int length)
c6612086e8c9 5050147: RFE: Add More Useful Constructors to MidiMessage Subclasses
amenkov
parents: 2
diff changeset
   158
            throws InvalidMidiDataException {
c6612086e8c9 5050147: RFE: Add More Useful Constructors to MidiMessage Subclasses
amenkov
parents: 2
diff changeset
   159
        super(null);
c6612086e8c9 5050147: RFE: Add More Useful Constructors to MidiMessage Subclasses
amenkov
parents: 2
diff changeset
   160
        setMessage(status, data, length);
c6612086e8c9 5050147: RFE: Add More Useful Constructors to MidiMessage Subclasses
amenkov
parents: 2
diff changeset
   161
    }
c6612086e8c9 5050147: RFE: Add More Useful Constructors to MidiMessage Subclasses
amenkov
parents: 2
diff changeset
   162
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   163
    /**
26003
d630c97424bd 8050852: Javadoc cleanup of javax.sound.midi package
serb
parents: 19207
diff changeset
   164
     * Constructs a new {@code SysexMessage}.
d630c97424bd 8050852: Javadoc cleanup of javax.sound.midi package
serb
parents: 19207
diff changeset
   165
     *
d630c97424bd 8050852: Javadoc cleanup of javax.sound.midi package
serb
parents: 19207
diff changeset
   166
     * @param  data an array of bytes containing the complete message. The
d630c97424bd 8050852: Javadoc cleanup of javax.sound.midi package
serb
parents: 19207
diff changeset
   167
     *         message data may be changed using the {@code setMessage} method.
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   168
     * @see #setMessage
90ce3da70b43 Initial load
duke
parents:
diff changeset
   169
     */
90ce3da70b43 Initial load
duke
parents:
diff changeset
   170
    protected SysexMessage(byte[] data) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   171
        super(data);
90ce3da70b43 Initial load
duke
parents:
diff changeset
   172
    }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   173
90ce3da70b43 Initial load
duke
parents:
diff changeset
   174
    /**
26003
d630c97424bd 8050852: Javadoc cleanup of javax.sound.midi package
serb
parents: 19207
diff changeset
   175
     * Sets the data for the system exclusive message. The first byte of the
d630c97424bd 8050852: Javadoc cleanup of javax.sound.midi package
serb
parents: 19207
diff changeset
   176
     * data array must be a valid system exclusive status byte (0xF0 or 0xF7).
d630c97424bd 8050852: Javadoc cleanup of javax.sound.midi package
serb
parents: 19207
diff changeset
   177
     *
d630c97424bd 8050852: Javadoc cleanup of javax.sound.midi package
serb
parents: 19207
diff changeset
   178
     * @param  data the system exclusive message data
d630c97424bd 8050852: Javadoc cleanup of javax.sound.midi package
serb
parents: 19207
diff changeset
   179
     * @param  length the length of the valid message data in the array,
d630c97424bd 8050852: Javadoc cleanup of javax.sound.midi package
serb
parents: 19207
diff changeset
   180
     *         including the status byte
47195
b309b58eb190 8181566: JavaSound javadoc clarification
serb
parents: 45012
diff changeset
   181
     * @throws InvalidMidiDataException if the parameter values do not specify a
b309b58eb190 8181566: JavaSound javadoc clarification
serb
parents: 45012
diff changeset
   182
     *         valid MIDI system exclusive message
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   183
     */
40444
afabcfc2f3ef 8163949: Cleanup of classes which are related to JavaSound
serb
parents: 32871
diff changeset
   184
    @Override
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   185
    public void setMessage(byte[] data, int length) throws InvalidMidiDataException {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   186
        int status = (data[0] & 0xFF);
90ce3da70b43 Initial load
duke
parents:
diff changeset
   187
        if ((status != 0xF0) && (status != 0xF7)) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   188
            throw new InvalidMidiDataException("Invalid status byte for sysex message: 0x" + Integer.toHexString(status));
90ce3da70b43 Initial load
duke
parents:
diff changeset
   189
        }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   190
        super.setMessage(data, length);
90ce3da70b43 Initial load
duke
parents:
diff changeset
   191
    }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   192
90ce3da70b43 Initial load
duke
parents:
diff changeset
   193
    /**
90ce3da70b43 Initial load
duke
parents:
diff changeset
   194
     * Sets the data for the system exclusive message.
26003
d630c97424bd 8050852: Javadoc cleanup of javax.sound.midi package
serb
parents: 19207
diff changeset
   195
     *
d630c97424bd 8050852: Javadoc cleanup of javax.sound.midi package
serb
parents: 19207
diff changeset
   196
     * @param  status the status byte for the message (0xF0 or 0xF7)
d630c97424bd 8050852: Javadoc cleanup of javax.sound.midi package
serb
parents: 19207
diff changeset
   197
     * @param  data the system exclusive message data
d630c97424bd 8050852: Javadoc cleanup of javax.sound.midi package
serb
parents: 19207
diff changeset
   198
     * @param  length the length of the valid message data in the array
d630c97424bd 8050852: Javadoc cleanup of javax.sound.midi package
serb
parents: 19207
diff changeset
   199
     * @throws InvalidMidiDataException if the status byte is invalid for a
47195
b309b58eb190 8181566: JavaSound javadoc clarification
serb
parents: 45012
diff changeset
   200
     *         system exclusive message
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   201
     */
90ce3da70b43 Initial load
duke
parents:
diff changeset
   202
    public void setMessage(int status, byte[] data, int length) throws InvalidMidiDataException {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   203
        if ( (status != 0xF0) && (status != 0xF7) ) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   204
            throw new InvalidMidiDataException("Invalid status byte for sysex message: 0x" + Integer.toHexString(status));
90ce3da70b43 Initial load
duke
parents:
diff changeset
   205
        }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   206
        if (length < 0 || length > data.length) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   207
            throw new IndexOutOfBoundsException("length out of bounds: "+length);
90ce3da70b43 Initial load
duke
parents:
diff changeset
   208
        }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   209
        this.length = length + 1;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   210
90ce3da70b43 Initial load
duke
parents:
diff changeset
   211
        if (this.data==null || this.data.length < this.length) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   212
            this.data = new byte[this.length];
90ce3da70b43 Initial load
duke
parents:
diff changeset
   213
        }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   214
90ce3da70b43 Initial load
duke
parents:
diff changeset
   215
        this.data[0] = (byte) (status & 0xFF);
90ce3da70b43 Initial load
duke
parents:
diff changeset
   216
        if (length > 0) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   217
            System.arraycopy(data, 0, this.data, 1, length);
90ce3da70b43 Initial load
duke
parents:
diff changeset
   218
        }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   219
    }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   220
90ce3da70b43 Initial load
duke
parents:
diff changeset
   221
    /**
26003
d630c97424bd 8050852: Javadoc cleanup of javax.sound.midi package
serb
parents: 19207
diff changeset
   222
     * Obtains a copy of the data for the system exclusive message. The returned
d630c97424bd 8050852: Javadoc cleanup of javax.sound.midi package
serb
parents: 19207
diff changeset
   223
     * array of bytes does not include the status byte.
d630c97424bd 8050852: Javadoc cleanup of javax.sound.midi package
serb
parents: 19207
diff changeset
   224
     *
d630c97424bd 8050852: Javadoc cleanup of javax.sound.midi package
serb
parents: 19207
diff changeset
   225
     * @return array containing the system exclusive message data
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   226
     */
90ce3da70b43 Initial load
duke
parents:
diff changeset
   227
    public byte[] getData() {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   228
        byte[] returnedArray = new byte[length - 1];
90ce3da70b43 Initial load
duke
parents:
diff changeset
   229
        System.arraycopy(data, 1, returnedArray, 0, (length - 1));
90ce3da70b43 Initial load
duke
parents:
diff changeset
   230
        return returnedArray;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   231
    }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   232
90ce3da70b43 Initial load
duke
parents:
diff changeset
   233
    /**
26003
d630c97424bd 8050852: Javadoc cleanup of javax.sound.midi package
serb
parents: 19207
diff changeset
   234
     * Creates a new object of the same class and with the same contents as this
d630c97424bd 8050852: Javadoc cleanup of javax.sound.midi package
serb
parents: 19207
diff changeset
   235
     * object.
d630c97424bd 8050852: Javadoc cleanup of javax.sound.midi package
serb
parents: 19207
diff changeset
   236
     *
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   237
     * @return a clone of this instance
90ce3da70b43 Initial load
duke
parents:
diff changeset
   238
     */
40444
afabcfc2f3ef 8163949: Cleanup of classes which are related to JavaSound
serb
parents: 32871
diff changeset
   239
    @Override
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   240
    public Object clone() {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   241
        byte[] newData = new byte[length];
90ce3da70b43 Initial load
duke
parents:
diff changeset
   242
        System.arraycopy(data, 0, newData, 0, newData.length);
50832
e069b9e49ca7 8205456: Unification of iterations over arrays
serb
parents: 47216
diff changeset
   243
        return new SysexMessage(newData);
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   244
    }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   245
}