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]));
}
}
}
|