package org.herac.tuxguitar.gui.util;
import org.herac.tuxguitar.gui.TuxGuitar;
import org.herac.tuxguitar.player.base.MidiRepeatController;
import org.herac.tuxguitar.song.managers.TGSongManager;
import org.herac.tuxguitar.song.models.TGMeasureHeader;
public class MidiTickUtil {
public static int getEHeader() {
return TuxGuitar.instance().getPlayer().getLoopEHeader();
}
public static int getSHeader() {
return TuxGuitar.instance().getPlayer().getLoopSHeader();
}
public static long getStart(long tick) {
long startPoint = getStartPoint();
long start = startPoint;
long length = 0;
TGSongManager manager = TuxGuitar.instance().getSongManager();
MidiRepeatController controller = new MidiRepeatController(manager
.getSong(), getSHeader(), getEHeader());
while (!controller.finished()) {
TGMeasureHeader header = manager.getSong().getMeasureHeader(
controller.getIndex());
controller.process();
if (controller.shouldPlay()) {
start += length;
length = header.getLength();
// verifico si es el compas correcto
if (tick >= start && tick < (start + length)) {
return header.getStart() + (tick - start);
}
}
}
return (tick < startPoint ? startPoint : start);
}
private static long getStartPoint() {
TuxGuitar.instance().getPlayer().updateLoop(false);
return TuxGuitar.instance().getPlayer().getLoopSPosition();
}
public static long getTick(long start) {
long startPoint = getStartPoint();
long tick = startPoint;
long length = 0;
TGSongManager manager = TuxGuitar.instance().getSongManager();
MidiRepeatController controller = new MidiRepeatController(manager
.getSong(), getSHeader(), getEHeader());
while (!controller.finished()) {
TGMeasureHeader header = manager.getSong().getMeasureHeader(
controller.getIndex());
controller.process();
if (controller.shouldPlay()) {
tick += length;
length = header.getLength();
// verifico si es el compas correcto
if (start >= header.getStart() && start < (header.getStart() + length)) {
return tick;
}
}
}
return (start < startPoint ? startPoint : tick);
}
}