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)); }
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)); }