public Beat FindBeat(Track[] tracks, int tick)
{
// get all beats within the masterbar
var masterBar = FindMasterBar(tick);
if (masterBar == null)
{
return null;
}
BeatTickLookup beat = null;
for (int t = 0; t < tracks.Length; t++)
{
var beats = masterBar.BeatsPerTrack[tracks[t].Index];
if (beats != null)
{
for (int b = 0; b < beats.Count; b++)
{
// is the current beat played on the given tick?
var currentBeat = beats[b];
if (currentBeat.Start <= tick && tick < currentBeat.End)
{
// take the latest played beat we can find. (most right)
if (beat == null || (beat.Start < currentBeat.Start))
{
beat = beats[b];
}
}
// if we are already past the tick, we can stop searching
else if (currentBeat.End > tick)
{
break;
}
}
}
}
if (beat == null)
{
return null;
}
return beat.Beat;
}