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

#ifndef __javax_sound_midi_Sequence__
#define __javax_sound_midi_Sequence__

#pragma interface

#include <java/lang/Object.h>
#include <gcj/array.h>

extern "Java"
{
  namespace javax
  {
    namespace sound
    {
      namespace midi
      {
          class Patch;
          class Sequence;
          class Track;
      }
    }
  }
}

class javax::sound::midi::Sequence : public ::java::lang::Object
{

  void init(jfloat, jint, jint);
public:
  Sequence(jfloat, jint);
  Sequence(jfloat, jint, jint);
  virtual jfloat getDivisionType();
  virtual jint getResolution();
  virtual ::javax::sound::midi::Track * createTrack();
  virtual jboolean deleteTrack(::javax::sound::midi::Track *);
  virtual JArray< ::javax::sound::midi::Track * > * getTracks();
  virtual jlong getMicrosecondLength();
  virtual jlong getTickLength();
  virtual JArray< ::javax::sound::midi::Patch * > * getPatchList();
public: // actually protected
  jfloat __attribute__((aligned(__alignof__( ::java::lang::Object)))) divisionType;
  jint resolution;
  ::java::util::Vector * tracks;
public:
  static jfloat PPQ;
  static jfloat SMPTE_24;
  static jfloat SMPTE_25;
  static jfloat SMPTE_30;
  static jfloat SMPTE_30DROP;
  static ::java::lang::Class class$;
};

#endif // __javax_sound_midi_Sequence__
