public List <TimeSpan> GetBeats() { List <TimeSpan> result = new List <TimeSpan>(); TimeSpan threshold = TimeSpan.FromMilliseconds(10); TimeSpan position = TimePanel.GetPosition(_parent); TimeSpan duration = TimePanel.GetDuration(_parent); TimeSpan currentPosition = position; TimeSpan endposition = position + duration; var pattern = BeatDefinition.Pattern; TimeSpan beatLength = PatternDuration.Divide(pattern.Length); while (endposition - currentPosition > threshold) { foreach (bool isactive in pattern) { if (isactive) { result.Add(currentPosition); } currentPosition += beatLength; if (endposition - currentPosition <= threshold) { break; } } } return(result); }
public void Snap() { EnsureParent(); if (_parent == null) { return; } TimeSpan duration = TimePanel.GetDuration(_parent); if (duration <= TimeSpan.Zero) { return; } if (!TimeLock) { _patternRepeats = duration.Divide(PatternDuration); } int repeats = (int)Math.Round(_patternRepeats); if (repeats <= 0) { repeats = 1; } duration = PatternDuration.Multiply(repeats); _patternRepeats = repeats; TimePanel.SetDuration(_parent, duration); }