private CongenericScoreTrack MergedTracks(List<CongenericScoreTrack> tracks)
{
// список склеенных дорожек
var temp = (CongenericScoreTrack)tracks[0].Clone();
// список склеенных тактов
var tempList = new List<Measure>(temp.MeasureList);
for (int i = 1; i < tracks.Count; i++)
{
if (tempList.Count != tracks[i].MeasureList.Count)
{
throw new Exception("ScoreTrack: invalid measure count");
}
for (int j = 0; j < temp.MeasureList.Count; j++)
{
// склеивание j-тых тактов
var tempMeasure = (Measure)tracks[i].MeasureList[j].Clone();
tempMeasure.MergeMeasures(tempList[j]);
tempList.RemoveAt(j);
tempList.Insert(j, tempMeasure);
}
}
return new CongenericScoreTrack(temp.Name, tempList);
}