home *** CD-ROM | disk | FTP | other *** search
- package javax.sound.midi;
-
- import java.util.Vector;
-
- public class Sequence {
- public static final float PPQ = 0.0F;
- public static final float SMPTE_24 = 24.0F;
- public static final float SMPTE_25 = 25.0F;
- public static final float SMPTE_30DROP = 29.97F;
- public static final float SMPTE_30 = 30.0F;
- protected float divisionType;
- protected int resolution;
- protected Vector tracks = new Vector();
-
- public Sequence(float var1, int var2) throws InvalidMidiDataException {
- if (var1 == 0.0F) {
- this.divisionType = 0.0F;
- } else if (var1 == 24.0F) {
- this.divisionType = 24.0F;
- } else if (var1 == 25.0F) {
- this.divisionType = 25.0F;
- } else if (var1 == 29.97F) {
- this.divisionType = 29.97F;
- } else {
- if (var1 != 30.0F) {
- throw new InvalidMidiDataException("Unsupported division type: " + var1);
- }
-
- this.divisionType = 30.0F;
- }
-
- this.resolution = var2;
- }
-
- public Sequence(float var1, int var2, int var3) throws InvalidMidiDataException {
- if (var1 == 0.0F) {
- this.divisionType = 0.0F;
- } else if (var1 == 24.0F) {
- this.divisionType = 24.0F;
- } else if (var1 == 25.0F) {
- this.divisionType = 25.0F;
- } else if (var1 == 29.97F) {
- this.divisionType = 29.97F;
- } else {
- if (var1 != 30.0F) {
- throw new InvalidMidiDataException("Unsupported division type: " + var1);
- }
-
- this.divisionType = 30.0F;
- }
-
- this.resolution = var2;
-
- for(int var4 = 0; var4 < var3; ++var4) {
- this.tracks.addElement(new Track());
- }
-
- }
-
- public float getDivisionType() {
- return this.divisionType;
- }
-
- public int getResolution() {
- return this.resolution;
- }
-
- public Track createTrack() {
- Track var1 = new Track();
- this.tracks.addElement(var1);
- return var1;
- }
-
- public boolean deleteTrack(Track var1) {
- Vector var2 = this.tracks;
- synchronized(var2) {
- boolean var3 = this.tracks.removeElement(var1);
- return var3;
- }
- }
-
- public Track[] getTracks() {
- Vector var1 = this.tracks;
- synchronized(var1) {
- Track[] var2 = new Track[this.tracks.size()];
-
- for(int var3 = 0; var3 < var2.length; ++var3) {
- var2[var3] = (Track)this.tracks.elementAt(var3);
- }
-
- return var2;
- }
- }
-
- public long getMicrosecondLength() {
- long var1 = this.getTickLength();
- if (this.divisionType != 0.0F) {
- double var3 = (double)this.getTickLength() / (double)(this.divisionType * (float)this.resolution);
- return (long)((double)1.0E9F * var3);
- } else {
- Track var5 = new Track();
- Object var6 = null;
- Object var7 = null;
- Object var8 = null;
- Object var9 = null;
- Vector var11 = this.tracks;
- synchronized(var11) {
- for(int var12 = 0; var12 < this.tracks.size(); ++var12) {
- Track var21 = (Track)this.tracks.elementAt(var12);
-
- for(int var13 = 0; var13 < var21.size(); ++var13) {
- MidiEvent var22 = var21.get(var13);
- MidiMessage var24 = var22.getMessage();
- if (var24 instanceof MetaMessage && ((MetaMessage)var24).getType() == 81) {
- var5.add(var22);
- }
- }
- }
- }
-
- int var25 = 500000;
- long var28 = 0L;
- long var15 = 0L;
- long var17 = 0L;
-
- for(int var19 = 0; var19 < var5.size() - 1; ++var19) {
- MidiEvent var23 = var5.get(var19);
- var17 = var23.getTick();
- if (var17 >= var15) {
- var28 += (var17 - var15) * (long)var25 / (long)this.resolution;
- var15 = var17;
- byte[] var10 = ((MetaMessage)var23.getMessage()).getMessage();
- var25 = 255 & var10[5];
- var25 |= (255 & var10[4]) << 8;
- var25 |= (255 & var10[3]) << 16;
- }
- }
-
- var17 = this.getTickLength();
- if (var17 > var15) {
- var28 += (var17 - var15) * (long)var25 / (long)this.resolution;
- }
-
- return var28;
- }
- }
-
- public long getTickLength() {
- long var1 = 0L;
- Vector var3 = this.tracks;
- synchronized(var3) {
- for(int var4 = 0; var4 < this.tracks.size(); ++var4) {
- long var5 = ((Track)this.tracks.elementAt(var4)).ticks();
- if (var5 > var1) {
- var1 = var5;
- }
- }
-
- return var1;
- }
- }
-
- public Patch[] getPatchList() {
- return new Patch[0];
- }
- }
-