summaryrefslogtreecommitdiff
path: root/NET/worlds/scape/CDTrackInfo.java
blob: e3c35d95aee174ad60a752d3d64da05ff9404c5d (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
package NET.worlds.scape;

public class CDTrackInfo {
   private int[] pos;
   private int[] len;

   public CDTrackInfo(int numTracks) {
      this.pos = new int[numTracks];
      this.len = new int[numTracks];
   }

   public int getNumTracks() {
      return this.pos.length;
   }

   public int getStartFrames(int track) {
      return this.getPosM(track) * 60 * 75 + this.getPosS(track) * 75 + this.getPosF(track);
   }

   public int getEndFrames(int track) {
      return track == this.pos.length - 1
         ? this.getStartFrames(track) + this.getLenM(track) * 60 * 75 + this.getLenS(track) * 75 + this.getLenF(track)
         : this.getStartFrames(track + 1) - 1;
   }

   public int getPosM(int track) {
      return minutes(this.pos[track]);
   }

   public int getPosS(int track) {
      return seconds(this.pos[track]);
   }

   public int getPosF(int track) {
      return frames(this.pos[track]);
   }

   public int getLenM(int track) {
      return minutes(this.len[track]);
   }

   public int getLenS(int track) {
      return seconds(this.len[track]);
   }

   public int getLenF(int track) {
      return frames(this.len[track]);
   }

   private static int minutes(int packed) {
      return packed & 0xFF;
   }

   private static int seconds(int packed) {
      return packed >> 8 & 0xFF;
   }

   private static int frames(int packed) {
      return packed >> 16 & 0xFF;
   }

   private static String format2(int val) {
      String result = "";
      if (val < 10) {
         result = "0";
      }

      return result + val;
   }

   private static String format(int packed) {
      return minutes(packed) + ":" + format2(seconds(packed)) + ":" + format2(frames(packed));
   }

   public void dump() {
      System.out.println("Tracks: " + this.pos.length);

      for (int i = 0; i < this.pos.length; i++) {
         System.out.println("Track " + i + " " + "start " + format(this.pos[i]) + " length " + format(this.len[i]));
      }
   }
}