public void ReplacePitchLine(List <PitchObject> PitchBend, bool KeepBound = true)
        {
            ClearCache();
            List <PitchObject> poj = PitchBend;

            if (poj.Count == 0)
            {
                return;
            }
            poj.Sort();


            TickSortList <PitchObject> PL = partsObject.PitchList;
            long st = poj[0].Tick;
            long et = poj[poj.Count - 1].Tick;

            if (KeepBound)
            {
                if (KeepBound)
                {
                    poj[0] = new PitchObject(st, getPitch(st));

                    poj[poj.Count - 1] = new PitchObject(et, getPitch(et));
                }
            }

            clearPitchList(ref PL, st, et);
            partsObject.PitchList.AddRange(poj);
            partsObject.PitchList.Sort();
        }
        public void ReplaceRealPitchLine(List <PitchObject> PitchBend, bool KeepBound = true)
        {
            ClearCache();
            List <PitchObject> poj = PitchBend;

            if (poj.Count == 0)
            {
                return;
            }
            long st = poj[0].Tick;
            long et = poj[poj.Count - 1].Tick;

            TickSortList <PitchObject> PL = partsObject.PitchList;

            if (KeepBound)
            {
                if (KeepBound)
                {
                    poj[0] = new PitchObject(st, getPitch(st) + getBasePitch(st));

                    poj[poj.Count - 1] = new PitchObject(et, getPitch(et) + getBasePitch(et));
                }
            }

            clearPitchList(ref PL, st, et);
            for (int i = 0; i < poj.Count; i++)
            {
                long   tick  = poj[i].Tick;
                double value = poj[i].PitchValue.PitchValue;
                value = value - getBasePitch(tick);
                partsObject.PitchList.Add(new PitchObject(tick, value));
            }
            ;
            partsObject.PitchList.Sort();
        }
        public static List <PitchObject> CalcGraphS(PitchObject S1, PitchObject S2, long MinTickDert = 1)
        {
            if (S1 == null)
            {
                return(new List <PitchObject>());
            }
            if (S2 == null)
            {
                return(new List <PitchObject>());
            }
            if (MinTickDert < 1)
            {
                MinTickDert = 1;
            }
            //系数计算
            //0点坐标
            double B = pi / (((double)S2.Tick - (double)S1.Tick));
            double C = -B * S1.Tick;
            double A = Math.Abs(S1.PitchValue.PitchValue - S2.PitchValue.PitchValue) / 2;

            List <PitchObject> ret = new List <PitchObject>();

            for (long i = Math.Min(S1.Tick, S2.Tick); i <= Math.Max(S1.Tick, S2.Tick); i += MinTickDert)
            {
                if (S2.PitchValue.PitchValue <= S1.PitchValue.PitchValue)
                {
                    ret.Add(new PitchObject(i, S2.PitchValue.PitchValue + A + A * Math.Cos(B * i + C)));
                }
                else
                {
                    ret.Add(new PitchObject(i, S1.PitchValue.PitchValue + A - A * Math.Cos(B * i + C)));
                }
            }
            return(ret);
        }
        private List <PitchObject> CalcGraphS(PitchObject S1, PitchObject S2)
        {
            if (S1 == null)
            {
                return(new List <PitchObject>());
            }
            if (S2 == null)
            {
                return(new List <PitchObject>());
            }
            //系数计算
            //0点坐标
            double B = 3.1415926 / (((double)S2.Tick - (double)S1.Tick));
            double C = -B * S1.Tick;
            double A = Math.Abs(S1.PitchValue.PitchValue - S2.PitchValue.PitchValue) / 2;

            List <PitchObject> ret = new List <PitchObject>();

            for (long i = TickSortList <PitchObject> .TickFormat(Math.Min(S1.Tick, S2.Tick)); i <= TickSortList <PitchObject> .TickFormat(Math.Max(S1.Tick, S2.Tick)); i = i + TickSortList <PitchObject> .TickStep)
            {
                if (S2.PitchValue.PitchValue <= S1.PitchValue.PitchValue)
                {
                    ret.Add(new PitchObject(i, S2.PitchValue.PitchValue + A + A * Math.Cos(B * i + C)));
                }
                else
                {
                    ret.Add(new PitchObject(i, S1.PitchValue.PitchValue + A - A * Math.Cos(B * i + C)));
                }
            }
            return(ret);
        }
 void ParamWindow_ParamAreaMouseMove(object sender, ParamMouseEventArgs e)
 {
     if (!_HandleEvents)
     {
         return;
     }
     CurValue = e.MidPercent * 0.5 * Zoom;
     if (PitchDragingStatus == PitchView.PitchDragingType.None)
     {
         return;
     }
     if (e.Tick == PitchStP1.Tick)
     {
         return;
     }
     PitchTmpP0 = new PitchObject(e.Tick, e.MidPercent * 0.5 * Zoom);
     if (_PitchToolsStatus == PitchView.PitchDragingType.None)
     {
         ParamWindow.ParentForm.Cursor = Cursors.Arrow;
     }
     else
     {
         ParamWindow.ParentForm.Cursor = Cursors.Cross;
     }
 }
 void ParamWindow_ParamAreaMouseDown(object sender, ParamMouseEventArgs e)
 {
     if (!_HandleEvents)
     {
         PitchDragingStatus = PitchView.PitchDragingType.None;
         PitchStP1          = null;
         PitchTmpP0         = null;
         return;
     }
     if (_PitchToolsStatus == PitchView.PitchDragingType.None)
     {
         return;
     }
     if (PitchDragingStatus != PitchView.PitchDragingType.None)
     {
         return;
     }
     if (e.MouseEventArgs.Button != MouseButtons.Left)
     {
         return;
     }
     PitchStP1          = new PitchObject(e.Tick, e.MidPercent * 0.5 * Zoom);
     PitchDragingStatus = _PitchToolsStatus;
     if (PitchActionBegin != null)
     {
         PitchActionBegin(PitchDragingStatus);
     }
 }
 private void PianoWindow_TrackMouseDown(object sender, VocalUtau.DirectUI.PianoMouseEventArgs e)
 {
     if (!_HandleEvents)
     {
         PitchDragingStatus = PitchDragingType.None;
         PitchStP1          = null;
         PitchTmpP0         = null;
         return;
     }
     if (_PitchToolsStatus == PitchDragingType.None)
     {
         return;
     }
     if (PitchDragingStatus != PitchDragingType.None)
     {
         return;
     }
     if (e.MouseEventArgs.Button != MouseButtons.Left)
     {
         return;
     }
     PitchStP1          = new PitchObject(e.Tick, e.PitchValue.PitchValue);
     PitchDragingStatus = _PitchToolsStatus;
     if (PitchActionBegin != null)
     {
         PitchActionBegin(PitchDragingStatus);
     }
 }
        public static List <PitchObject> CalcLineSilk(PitchObject S1, PitchObject S2, long MinTickDert = 1)
        {
            if (S1 == null)
            {
                return(new List <PitchObject>());
            }
            if (S2 == null)
            {
                return(new List <PitchObject>());
            }
            if (MinTickDert < 1)
            {
                MinTickDert = 1;
            }

            PitchObject M1 = S1;
            PitchObject M2 = S2;

            if (S1.Tick >= S2.Tick)
            {
                M1 = S2;
                M2 = S1;
            }

            double pK, pB;

            if (M1.PitchValue.PitchValue == M2.PitchValue.PitchValue)
            {
                pK = 0;
            }
            else
            {
                pK = (M2.PitchValue.PitchValue - M1.PitchValue.PitchValue) / (M2.Tick - M1.Tick);
            }
            pB = M2.PitchValue.PitchValue - pK * M2.Tick;
            double             P1  = pK * M1.Tick + pB;
            double             P2  = pK * M2.Tick + pB;
            List <PitchObject> ret = new List <PitchObject>();

            for (long i = M1.Tick; i <= M2.Tick; i += MinTickDert)
            {
                ret.Add(new PitchObject(i, pK * i + pB));
            }
            return(ret);
        }
        private void PianoWindow_TrackMouseUp(object sender, VocalUtau.DirectUI.PianoMouseEventArgs e)
        {
            if (!_HandleEvents)
            {
                return;
            }
            if (PitchDragingStatus == PitchDragingType.None)
            {
                return;
            }
            PitchObject PitchEdP2 = new PitchObject(e.Tick, e.PitchValue.PitchValue);

            switch (PitchDragingStatus)
            {
            case PitchDragingType.DrawLine: PartsObject.PitchCompiler.ReplaceRealPitchLine(PitchMathUtils.CalcLineSilk(PitchStP1, PitchEdP2)); break;

            case PitchDragingType.DrawGraphJ: PartsObject.PitchCompiler.ReplaceRealPitchLine(PitchMathUtils.CalcGraphJ(PitchStP1, PitchEdP2)); break;

            case PitchDragingType.DrawGraphR: PartsObject.PitchCompiler.ReplaceRealPitchLine(PitchMathUtils.CalcGraphR(PitchStP1, PitchEdP2)); break;

            case PitchDragingType.DrawGraphS: PartsObject.PitchCompiler.ReplaceRealPitchLine(PitchMathUtils.CalcGraphS(PitchStP1, PitchEdP2)); break;

            case PitchDragingType.EarseArea:
                if (PitchStP1 != null && PitchTmpP0 != null)
                {
                    PitchView.BlockDia PitchDia = new PitchView.BlockDia();
                    PitchDia.setStartPoint(PitchStP1.Tick, PitchStP1.PitchValue.NoteNumber);
                    PitchDia.setEndPoint(PitchTmpP0.Tick, PitchTmpP0.PitchValue.NoteNumber);
                    earsePitchLine(PitchDia, _EarseModeV2);
                }
                break;
            }
            PitchDragingType EDStatus = PitchDragingStatus;

            PitchDragingStatus = PitchDragingType.None;
            PitchStP1          = null;
            PitchTmpP0         = null;
            if (PitchActionEnd != null)
            {
                PitchActionEnd(EDStatus);
            }
        }
        public void DrawPitchLine(List <PitchObject> SortedPitchPointSilk, Color LineColor, float LineWidth, System.Drawing.Drawing2D.DashStyle LineStyle)
        {
            //计算X相位边界
            long MinTick = pprops.PianoStartTick;
            long MaxTick = pprops.PianoStartTick + (long)Math.Round(pprops.dertPixel2dertTick(baseEvent.ClipRectangle.Width), 0) + 1;
            //计算Y相位边界
            double MaxNoteCount = (double)baseEvent.ClipRectangle.Height / rconf.Const_RollNoteHeight;

            if (MaxNoteCount > (int)MaxNoteCount)
            {
                MaxNoteCount = (int)MaxNoteCount + 1;
            }
            uint MaxNote = pprops.PianoTopNote;
            uint MinNote = MaxNote - (uint)MaxNoteCount;

            List <Point> PixelSilkLine = new List <Point>();
            bool         First         = true;

            for (int i = 1; i < SortedPitchPointSilk.Count; i++)
            {
                if (SortedPitchPointSilk[i].Tick > MinTick && SortedPitchPointSilk[i - 1].Tick < MaxTick)
                {
                    PitchObject pn  = SortedPitchPointSilk[i];
                    PitchObject pn2 = SortedPitchPointSilk[i - 1];
                    if (First)
                    {
                        Point StartP = PitchObject2Point(pn2, MinTick, MaxTick, MinNote, MaxNote);
                        PixelSilkLine.Add(StartP);
                        First = false;
                    }
                    Point EndP = PitchObject2Point(pn, MinTick, MaxTick, MinNote, MaxNote);
                    PixelSilkLine.Add(EndP);
                }
            }

            D2DGraphics g = baseEvent.D2DGraphics;

            if (PixelSilkLine.Count > 1)
            {
                g.DrawPathGeometrySink(PixelSilkLine, LineColor, LineWidth, LineStyle, false);
            }
        }
        void ParamWindow_ParamAreaMouseUp(object sender, ParamMouseEventArgs e)
        {
            if (!_HandleEvents)
            {
                return;
            }
            if (PitchDragingStatus == PitchView.PitchDragingType.None)
            {
                return;
            }
            PitchObject PitchEdP2 = new PitchObject(e.Tick, e.MidPercent * 0.5 * Zoom);

            switch (PitchDragingStatus)
            {
            case PitchView.PitchDragingType.DrawLine: replacePitchLine(PitchMathUtils.CalcLineSilk(PitchStP1, PitchEdP2)); break;

            case PitchView.PitchDragingType.DrawGraphJ: replacePitchLine(PitchMathUtils.CalcGraphJ(PitchStP1, PitchEdP2)); break;

            case PitchView.PitchDragingType.DrawGraphR: replacePitchLine(PitchMathUtils.CalcGraphR(PitchStP1, PitchEdP2)); break;

            case PitchView.PitchDragingType.DrawGraphS: replacePitchLine(PitchMathUtils.CalcGraphS(PitchStP1, PitchEdP2)); break;

            case PitchView.PitchDragingType.EarseArea: earsePitchLine(PitchStP1, PitchEdP2, _EarseModeV2); break;
            }
            PitchView.PitchDragingType EDStatus = PitchDragingStatus;
            PitchDragingStatus = PitchView.PitchDragingType.None;
            PitchStP1          = null;
            PitchTmpP0         = null;
            if (PitchActionEnd != null)
            {
                PitchActionEnd(EDStatus);
            }
            if (_PitchToolsStatus == PitchView.PitchDragingType.None)
            {
                ParamWindow.ParentForm.Cursor = Cursors.Arrow;
            }
            else
            {
                ParamWindow.ParentForm.Cursor = Cursors.Cross;
            }
        }
        private Point PitchObject2Point(PitchObject Node, long MinTick, long MaxTick, uint MinNote, uint MaxNote)
        {
            long ETick      = Node.Tick - MinTick;//获得左边界距离启绘点距离;
            int  NodeXPixel = baseEvent.ClipRectangle.X;

            if (ETick < 0)
            {
                //起绘制点小于0;
                NodeXPixel = baseEvent.ClipRectangle.X - (int)Math.Round(pprops.dertTick2dertPixel(-ETick), 0);
            }
            else
            {
                NodeXPixel = baseEvent.ClipRectangle.X + (int)Math.Round(pprops.dertTick2dertPixel(ETick), 0);
            }

            uint   NoteDistance  = MaxNote - Node.PitchValue.NoteNumber;
            double PitchDistance = (double)Node.PitchValue.PitchValue - Node.PitchValue.NoteNumber;
            int    NodeYPixel    = baseEvent.ClipRectangle.Top + (int)(((double)NoteDistance - PitchDistance + 0.5) * rconf.Const_RollNoteHeight);

            return(new Point(NodeXPixel, NodeYPixel));
        }
示例#13
0
 private void PianoWindow_TrackMouseMove(object sender, VocalUtau.DirectUI.PianoMouseEventArgs e)
 {
     if (!_HandleEvents)
     {
         return;
     }
     if (PitchDragingStatus == PitchDragingType.None)
     {
         return;
     }
     if (e.Tick == PitchStP1.Tick)
     {
         return;
     }
     PitchTmpP0 = new PitchObject(e.Tick, e.PitchValue.PitchValue);
     if (_PitchToolsStatus == PitchDragingType.None)
     {
         PianoWindow.ParentForm.Cursor = Cursors.Arrow;
     }
     else
     {
         PianoWindow.ParentForm.Cursor = Cursors.Cross;
     }
 }
 public static List <PitchObject> CalcGraphR(PitchObject S1, PitchObject S2, long MinTickDert = 1)
 {
     return(CalcGraphJ(S2, S1, MinTickDert));
 }
 public void earsePitchLine(PitchObject P1, PitchObject P2, bool isModeV2)
 {
     // List<PitchObject> PN = PitchBendsList;
     // PitchActionUtils.earsePitchLine(ref PN, Math.Min(P1.Tick, P2.Tick), Math.Max(P1.Tick, P2.Tick), isModeV2);
     PartsObject.PitchCompiler.ClearPitchLine(Math.Min(P1.Tick, P2.Tick), Math.Max(P1.Tick, P2.Tick));
 }