public TrackViewModel(Track track)
{
_track = track;
// general midi Programs
if (track.IsPercussion)
{
TrackType = TrackType.Drums;
}
else if (track.PlaybackInfo.Program >= 0 && track.PlaybackInfo.Program <= 6)
{
TrackType = TrackType.Piano;
}
else if (track.PlaybackInfo.Program >= 26 && track.PlaybackInfo.Program <= 31)
{
TrackType = TrackType.ElectricGuitar;
}
else if (track.PlaybackInfo.Program >= 32 && track.PlaybackInfo.Program <= 39)
{
TrackType = TrackType.BassGuitar;
}
else
{
TrackType = TrackType.Default;
}
// scan all bars if they have any note
_usedBars = new bool[track.Score.MasterBars.Count];
for (int s = 0; s < track.Staves.Count; s++)
{
var staff = track.Staves[s];
for (int barI = 0; barI < staff.Bars.Count; barI++)
{
Bar bar = staff.Bars[barI];
_usedBars[barI] = false;
for (int voiceI = 0; voiceI < bar.Voices.Count && (!_usedBars[barI]); voiceI++)
{
Voice voice = bar.Voices[voiceI];
for (int i = 0; i < voice.Beats.Count; i++)
{
var b = voice.Beats[i];
if (!b.IsRest)
{
_usedBars[barI] = true;
}
}
}
}
}
}