package org.herac.tuxguitar.io.ptb.helper; import org.herac.tuxguitar.song.models.TGDuration; public class TrackStartHelper { private int section; private long[][] voices; private boolean measureEmpty; private boolean measureRest; private long barStart; private long barLength; public TrackStartHelper(){ super(); } public void init(int section,int staffs){ this.section = section; this.voices = new long[staffs][2]; this.measureEmpty = true; this.measureRest = false; this.barStart = 0; this.barLength = 0; } public int getSection(){ return this.section; } public void initVoices(long start){ for(int i = 0; i < this.voices.length; i ++){ for(int j = 0; j < this.voices[i].length; j ++){ this.voices[i][j] = fixValue(start); } } this.measureEmpty = true; this.measureRest = false; } public long getMaxStart(){ long result = TGDuration.QUARTER_TIME; for(int i = 0; i < this.voices.length; i ++){ for(int j = 0; j < this.voices[i].length; j ++){ result = Math.max(result,this.voices[i][j] ); } } // checkRestMeasures if( this.measureRest && this.measureEmpty ){ result = Math.max(result, (this.barStart + this.barLength)); } return fixValue(result); } public long getVoiceStart(int staff,int voice){ return this.voices[staff][voice]; } public void setVoiceStart(int staff,int voice,long start){ this.voices[staff][voice] = fixValue(start); } public long getBarStart() { return this.barStart; } public void setBarStart(long barStart) { this.barStart = barStart; } public long getBarLength() { return this.barLength; } public void setBarLength(long barLength) { this.barLength = barLength; } public void checkBeat( boolean rest ){ this.measureEmpty = (this.measureEmpty && rest ); this.measureRest = true; } public long fixValue(long value){ return (((value % (TGDuration.QUARTER_TIME / 2)) + 10 > (TGDuration.QUARTER_TIME / 2))?(value + ((TGDuration.QUARTER_TIME / 2) - (value % (TGDuration.QUARTER_TIME / 2)))):value); } }