package nerdproject;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class TrackInfo {
// /live/track/info (tracknumber, armed (clipnumber, state, length))
// [state: 0 = no clip, 1 = has clip, 2 = playing, 3 = triggered]
private int trackNumber;
private boolean isArmed;
private List<Clip> clips = new ArrayList<Clip>();
public TrackInfo(Object[] message) {
this.trackNumber = (Integer) message[0];
this.isArmed = ((Integer) message[1]) == 0 ? false : true;
Object[] clipArray = Arrays.copyOfRange(message, 2, message.length);
int numClips = clipArray.length / 3;
for (int i = 1; i <= numClips; i++) {
Object[] clip = Arrays.copyOfRange(clipArray, 0, 3);
clips.add(new Clip((Integer) clip[0], ClipState
.fromInt((Integer) clip[1]), (float) clip[2]));
clipArray = Arrays.copyOfRange(clipArray, 3, message.length);
}
}
public int getTrackNumber() {
return trackNumber;
}
public boolean isArmed() {
return isArmed;
}
public List<Clip> getClips() {
return clips;
}
public int getClipCount() {
return clips.size();
}
class Clip {
private int clipNumber;
private ClipState clipState;
private float length;
public Clip(int clipNumber, ClipState clipState, float length) {
super();
this.clipNumber = clipNumber;
this.clipState = clipState;
this.length = length;
}
public int getClipNumber() {
return clipNumber;
}
public void setClipNumber(int clipNumber) {
this.clipNumber = clipNumber;
}
public ClipState getClipState() {
return clipState;
}
public void setClipState(ClipState clipState) {
this.clipState = clipState;
}
public float getLength() {
return length;
}
public boolean hasClip() {
return (this.clipState == ClipState.HAS_CLIP
|| this.clipState == ClipState.PLAYING
|| this.clipState == ClipState.TRIGGERED);
}
public boolean isPlaying() {
return this.clipState == ClipState.PLAYING;
}
public void setLength(float length) {
this.length = length;
}
}
}