
// DO NOT EDIT THIS FILE - it is machine generated -*- c++ -*-

#ifndef __javax_sound_midi_ShortMessage__
#define __javax_sound_midi_ShortMessage__

#pragma interface

#include <javax/sound/midi/MidiMessage.h>
#include <gcj/array.h>

extern "Java"
{
  namespace javax
  {
    namespace sound
    {
      namespace midi
      {
          class ShortMessage;
      }
    }
  }
}

class javax::sound::midi::ShortMessage : public ::javax::sound::midi::MidiMessage
{

public:
  ShortMessage();
public: // actually protected
  ShortMessage(JArray< jbyte > *);
public:
  virtual void setMessage(jint, jint, jint);
  virtual void setMessage(jint, jint, jint, jint);
  virtual void setMessage(jint);
public: // actually protected
  virtual jint getDataLength(jint);
public:
  virtual jint getChannel();
  virtual jint getCommand();
  virtual jint getData1();
  virtual jint getData2();
  virtual ::java::lang::Object * clone();
  static const jint MIDI_TIME_CODE = 241;
  static const jint SONG_POSITION_POINTER = 242;
  static const jint SONG_SELECT = 243;
  static const jint TUNE_REQUEST = 246;
  static const jint END_OF_EXCLUSIVE = 247;
  static const jint TIMING_CLOCK = 248;
  static const jint START = 250;
  static const jint CONTINUE = 251;
  static const jint STOP = 252;
  static const jint ACTIVE_SENSING = 254;
  static const jint SYSTEM_RESET = 255;
  static const jint NOTE_OFF = 128;
  static const jint NOTE_ON = 144;
  static const jint POLY_PRESSURE = 160;
  static const jint CONTROL_CHANGE = 176;
  static const jint PROGRAM_CHANGE = 192;
  static const jint CHANNEL_PRESSURE = 208;
  static const jint PITCH_BEND = 224;
private:
  static JArray< jbyte > * defaultMessage;
public:
  static ::java::lang::Class class$;
};

#endif // __javax_sound_midi_ShortMessage__
