package com.xenoage.zong.io.midi.out;
import com.xenoage.zong.core.header.ColumnHeader;
/**
* This class calculates the tempo changes for the {@link MidiConverter}.
*
* @author Uli Teschemacher
* @author Andreas Wenger
*/
public class MidiTempoConverter {
/**
* Writes tempo changes into the given tempo track.
* Only tempos found in the {@link ColumnHeader}s are used.
* /
public static void writeTempoTrack(Score score, Repetitions repetitions, int resolution,
MidiSequenceWriter<?> writer, int track) {
long measurestarttick = 0;
for (PlayRange playRange : repetitions.getRepetitions()) {
for (int iMeasure : range(playRange.start.measure, playRange.end.measure)) {
Fraction start = (playRange.start.measure == iMeasure ? playRange.start.beat : _0);
Fraction end = (playRange.end.measure == iMeasure ?
playRange.end.beat : score.getMeasureBeats(iMeasure));
BeatEList<Tempo> tempos = score.getHeader().getColumnHeader(iMeasure).getTempos();
if (tempos != null) {
for (BeatE<Tempo> beatE : tempos) {
long tick = measurestarttick +
calculateTickFromFraction(beatE.beat.sub(start), resolution);
writer.writeTempoChange(track, tick, beatE.getElement().getBeatsPerMinute());
}
}
Fraction measureDuration = end.sub(start);
measurestarttick += MidiConverter.calculateTickFromFraction(measureDuration, resolution);
}
}
} //*/
}