public void Generate()
{
// initialize tracks
for (int i = 0, j = _score.Tracks.Count; i < j; i++)
{
GenerateTrack(_score.Tracks[i]);
}
var controller = new MidiPlaybackController(_score);
MasterBar previousMasterBar = null; // store the previous played bar for repeats
while (!controller.Finished)
{
var index = controller.Index;
var bar = _score.MasterBars[index];
var currentTick = controller.CurrentTick;
controller.ProcessCurrent();
if (controller.ShouldPlay)
{
GenerateMasterBar(bar, previousMasterBar, currentTick);
for (int i = 0, j = _score.Tracks.Count; i < j; i++)
{
GenerateBar(_score.Tracks[i].Bars[index], currentTick);
}
}
controller.MoveNext();
previousMasterBar = bar;
}
}