Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        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);
        }