コード例 #1
0
ファイル: BeatBar2.cs プロジェクト: you0011/ScriptPlayer
        protected override void OnRender(DrawingContext drawingContext)
        {
            Rect fullRect = new Rect(new Point(), new Size(ActualWidth, ActualHeight));

            drawingContext.PushClip(new RectangleGeometry(fullRect));

            drawingContext.DrawRectangle(Background, null, fullRect);

            drawingContext.DrawLine(new Pen(Brushes.Red, 11), new Point(Midpoint * ActualWidth, 0), new Point(Midpoint * ActualWidth, ActualHeight));

            if (Beats != null)
            {
                double timeFrom = Progress.TotalSeconds - Midpoint * TotalDisplayedDuration;
                double timeTo   = Progress.TotalSeconds + (1 - Midpoint) * TotalDisplayedDuration;

                List <TimeSpan> absoluteBeatPositions = Beats.GetBeats(TimeSpan.FromSeconds(timeFrom), TimeSpan.FromSeconds(timeTo)).ToList();

                IEnumerable <double> relativeBeatPositions =
                    absoluteBeatPositions.Select(b => (b.TotalSeconds - timeFrom) / (timeTo - timeFrom));

                const double safeSpace = 30;
                double       y         = ActualHeight / 2.0;

                DrawLine(drawingContext, Colors.Red, new Point(-safeSpace, y),
                         new Point(ActualWidth + safeSpace, y));

                foreach (double pos in relativeBeatPositions)
                {
                    DrawLine(drawingContext, LineColor, new Point(pos * ActualWidth, -5), new Point(pos * ActualWidth, ActualHeight + 5), LineWidth);
                }
            }

            drawingContext.Pop();
        }
コード例 #2
0
        private void mnuShiftSelected_Click(object sender, RoutedEventArgs e)
        {
            TimeSpan tBegin = _marker1 < _marker2 ? _marker1 : _marker2;
            TimeSpan tEnd   = _marker1 < _marker2 ? _marker2 : _marker1;

            double shiftBy = GetDouble(0.0);

            if (Double.IsNaN(shiftBy))
            {
                return;
            }

            TimeSpan shift = TimeSpan.FromMilliseconds((int)shiftBy);

            List <TimeSpan> beatsToEvenOut = Beats.GetBeats(tBegin, tEnd).Select(b => b + shift).ToList();

            List <TimeSpan> otherBeats = Beats.Where(t => t <tBegin || t> tEnd).ToList();

            SetAllBeats(otherBeats.Concat(beatsToEvenOut));

            _marker1 += shift;
            _marker2 += shift;


            BeatBar.Marker1 = _marker1;
            BeatBar.Marker2 = _marker2;
        }
コード例 #3
0
        private void btnDetect_Click(object sender, RoutedEventArgs e)
        {
            BeatPatternEditor editor =
                new BeatPatternEditor(new bool[] { true, false, false, false, false, false, false, false, });

            if (editor.ShowDialog() != true)
            {
                return;
            }

            bool[] pattern = editor.Result;
            var    beats   = Beats.GetBeats(_begin, _end).ToList();

            BeatSegment segment = GetSegment(beats, pattern);

            if (segment == null)
            {
                return;
            }

            Segments.Add(segment);
        }
コード例 #4
0
        private void Normalize(int additionalBeats, bool trimToBeats = true)
        {
            TimeSpan tBegin = _marker1 < _marker2 ? _marker1 : _marker2;
            TimeSpan tEnd   = _marker1 < _marker2 ? _marker2 : _marker1;

            List <TimeSpan> beatsToEvenOut = Beats.GetBeats(tBegin, tEnd).ToList();

            List <TimeSpan> otherBeats = Beats.Where(t => t <tBegin || t> tEnd).ToList();

            if (beatsToEvenOut.Count < 2 && trimToBeats)
            {
                return;
            }

            TimeSpan first = trimToBeats ? beatsToEvenOut.Min() : tBegin;
            TimeSpan last  = trimToBeats ? beatsToEvenOut.Max() : tEnd;

            int numberOfBeats = (int)(beatsToEvenOut.Count + additionalBeats);

            if (numberOfBeats < 2)
            {
                numberOfBeats = 2;
            }

            TimeSpan tStart    = first;
            TimeSpan intervall = (last - first).Divide(numberOfBeats - 1);

            for (int i = 0; i < numberOfBeats; i++)
            {
                otherBeats.Add(tStart + intervall.Multiply(i));
            }

            Fadeout.SetText(intervall.TotalMilliseconds.ToString("f0") + "ms", TimeSpan.FromSeconds(4));

            SetAllBeats(otherBeats);
        }
コード例 #5
0
        protected override void OnRender(DrawingContext drawingContext)
        {
            #region Background

            Rect fullRect = new Rect(new Point(), new Size(ActualWidth, ActualHeight));
            drawingContext.PushClip(new RectangleGeometry(fullRect));
            drawingContext.DrawRectangle(Background, null, fullRect);

            #endregion

            #region Selection

            TimeSpan timeFrom = Progress - TotalDisplayedDuration.Multiply(Midpoint);
            TimeSpan timeTo   = Progress + TotalDisplayedDuration.Multiply(1 - Midpoint);

            if (Marker1 != TimeSpan.MinValue && Marker2 != TimeSpan.MinValue)
            {
                TimeSpan earlier = Marker1 < Marker2 ? Marker1 : Marker2;
                TimeSpan later   = Marker1 > Marker2 ? Marker1 : Marker2;

                if (later >= timeFrom && earlier <= timeTo)
                {
                    double xFrom = XFromTime(earlier);
                    double xTo   = XFromTime(later);

                    SolidColorBrush brush = new SolidColorBrush(Colors.Cyan)
                    {
                        Opacity = 0.4
                    };

                    drawingContext.DrawRectangle(brush, null, new Rect(new Point(xFrom, 0), new Point(xTo, ActualHeight)));
                }
            }

            if (Marker1 != TimeSpan.MinValue && IsTimeVisible(Marker1))
            {
                double x = XFromTime(Marker1);
                drawingContext.DrawLine(new Pen(Brushes.Cyan, 1), new Point(x, 0), new Point(x, ActualHeight));
            }

            if (Marker2 != TimeSpan.MinValue && IsTimeVisible(Marker2))
            {
                double x = XFromTime(Marker2);
                drawingContext.DrawLine(new Pen(Brushes.Cyan, 1), new Point(x, 0), new Point(x, ActualHeight));
            }

            #endregion

            #region MidPoint

            drawingContext.DrawLine(new Pen(Brushes.Red, 11), new Point(Midpoint * ActualWidth, 0), new Point(Midpoint * ActualWidth, ActualHeight));

            #endregion

            #region Beats

            if (Beats != null)
            {
                List <TimeSpan> absoluteBeatPositions = Beats.GetBeats(timeFrom, timeTo).ToList();

                IEnumerable <double> relativeBeatPositions =
                    absoluteBeatPositions.Select(b => (b - timeFrom).Divide(timeTo - timeFrom));

                //const double safeSpace = 30;
                //double y = ActualHeight / 2.0;

                //DrawLine(drawingContext, Colors.Red, new Point(-safeSpace, y),
                //    new Point(ActualWidth + safeSpace, y));

                foreach (double pos in relativeBeatPositions)
                {
                    DrawLine(drawingContext, LineColor, new Point(pos * ActualWidth, -5), new Point(pos * ActualWidth, ActualHeight + 5), LineWidth);
                }
            }

            #endregion

            drawingContext.Pop();
        }