home *** CD-ROM | disk | FTP | other *** search
/ S283 Planetary Science &n…he Search for Life DVD 2 / DVD-ROM.iso / install / jre1_3 / lib / rt.jar / javax / sound / midi / MetaMessage.class (.txt) < prev    next >
Encoding:
Java Class File  |  1979-12-31  |  1.9 KB  |  101 lines

  1. package javax.sound.midi;
  2.  
  3. import java.io.ByteArrayInputStream;
  4. import java.io.ByteArrayOutputStream;
  5. import java.io.DataInputStream;
  6. import java.io.DataOutputStream;
  7. import java.io.FilterInputStream;
  8. import java.io.IOException;
  9.  
  10. public class MetaMessage extends MidiMessage {
  11.    public static final int META = 255;
  12.    private static byte[] defaultMessage = new byte[]{-1, 0};
  13.    private int dataLength;
  14.  
  15.    public MetaMessage() {
  16.       this(defaultMessage);
  17.    }
  18.  
  19.    protected MetaMessage(byte[] var1) {
  20.       super(var1);
  21.       this.dataLength = 0;
  22.    }
  23.  
  24.    public void setMessage(int var1, byte[] var2, int var3) throws InvalidMidiDataException {
  25.       if (var1 >= 128) {
  26.          throw new InvalidMidiDataException("Invalid meta event with type " + var1);
  27.       } else {
  28.          try {
  29.             ByteArrayOutputStream var4 = new ByteArrayOutputStream();
  30.             DataOutputStream var5 = new DataOutputStream(var4);
  31.             var5.writeByte(255);
  32.             var5.writeByte(var1);
  33.             this.writeVarInt(var3, var5);
  34.             var5.write(var2, 0, var3);
  35.             super.data = var4.toByteArray();
  36.             super.length = super.data.length;
  37.             this.dataLength = var3;
  38.          } catch (IOException var6) {
  39.          }
  40.  
  41.       }
  42.    }
  43.  
  44.    public int getType() {
  45.       int var1 = 0;
  46.  
  47.       try {
  48.          ByteArrayInputStream var2 = new ByteArrayInputStream(super.data, 0, super.length);
  49.          DataInputStream var3 = new DataInputStream(var2);
  50.          ((FilterInputStream)var3).skip(1L);
  51.          var1 = var3.readUnsignedByte();
  52.       } catch (IOException var4) {
  53.       }
  54.  
  55.       return var1;
  56.    }
  57.  
  58.    public byte[] getData() {
  59.       byte[] var1 = new byte[this.dataLength];
  60.       System.arraycopy(super.data, super.length - this.dataLength, var1, 0, this.dataLength);
  61.       return var1;
  62.    }
  63.  
  64.    public Object clone() {
  65.       byte[] var1 = new byte[super.length];
  66.       System.arraycopy(super.data, 0, var1, 0, var1.length);
  67.       MetaMessage var2 = new MetaMessage(var1);
  68.       return var2;
  69.    }
  70.  
  71.    private void writeVarInt(int var1, DataOutputStream var2) throws InvalidMidiDataException, IOException {
  72.       byte var3 = 6;
  73.       byte[] var4 = new byte[var3];
  74.       int var5 = 0;
  75.       boolean var6 = false;
  76.  
  77.       for(int var7 = 0; var7 < var3; ++var7) {
  78.          var4[var7] = 0;
  79.       }
  80.  
  81.       for(int var8 = var3 - 1; var8 >= 0; --var8) {
  82.          var4[var8] = (byte)(var1 & 127);
  83.          var1 >>>= 7;
  84.          ++var5;
  85.          if (var5 > 1) {
  86.             var4[var8] = (byte)(var4[var8] | 128);
  87.          }
  88.  
  89.          if (var1 == 0) {
  90.             break;
  91.          }
  92.       }
  93.  
  94.       if ((var4[var3 - 1] & 128) != 0) {
  95.          throw new InvalidMidiDataException("Unable to create variable-length integer");
  96.       } else {
  97.          var2.write(var4, var3 - var5, var5);
  98.       }
  99.    }
  100. }
  101.