// 绘制和弦 private void DrawChord() { bool leftOrRight = _note.IsUpOrDown(); int headPosition = Start; int lastPosition = 0; // int chordPaintNum = 0; // 绘制和弦中的其他乐符(最后一个乐符即当前乐符,已经绘制),去掉和弦表中的最后一个乐符 for (int i = 0; i < _note.GetChordList().Count - 1; i++) { Note extraNote = _note.GetChordList()[i]; DrawShiftLine(extraNote.GetShift() / ParamsGetter.GetPitchPositionDiff()); int extraDuration = extraNote.GetType(); int extraPosition = extraNote.GetShift() + ParamsGetter.GetStaffCenterPosition(); if (Math.Abs(extraPosition - lastPosition) == ParamsGetter.GetPitchPositionDiff()) { if (leftOrRight) { headPosition += ParamsGetter.GetNoteHeadWidth(); } else { headPosition -= ParamsGetter.GetNoteHeadWidth(); } leftOrRight = !leftOrRight; } if (extraDuration == 1) // 全音符 { DrawSymbol("\uE12B", headPosition, extraPosition); continue; } else { if (extraDuration == 2) { DrawSymbol("\uE12C", headPosition, extraPosition); } else { DrawSymbol("\uE12D", headPosition, extraPosition); } } lastPosition = extraPosition; int temp; if (_note.IsUpOrDown()) { temp = extraPosition + ParamsGetter.GetNoteStemHeight(); } else { temp = extraPosition - ParamsGetter.GetNoteStemHeight(); } DrawLine(_stemX, extraPosition, _stemX, temp); } }
private void OnDraw() { int shift = 0; // 谱号偏移,如果是高音谱号偏移整个五线谱长度 switch (_head.GetSign()) { case "G": // 高音符号G shift = _paramsGetter.GetTotalHeight(); DrawSymbol("\uE19E", _paramsGetter.GetClefPortraitShift(), _paramsGetter.GetStaffCenterPosition() + shift); break; case "F": // 低音符号F shift = 0; DrawSymbol("\uE19C", _paramsGetter.GetClefPortraitShift(), _paramsGetter.GetStaffCenterPosition() + shift); break; default: break; } float first = _paramsGetter.GetFirstFifthsPosition(); float second = _paramsGetter.GetSecondFifthsPosition(); switch (_head.GetFifths()) { case "2": { DrawSymbol("\uE10E", first, _paramsGetter.GetStaffPosition() + shift); // # DrawSymbol("\uE10E", second, _paramsGetter.GetStaffCenterPosition() + shift); } break; case "1": DrawSymbol("\uE10E", first, _paramsGetter.GetStaffPosition() + shift); break; case "-1": DrawSymbol("\uE114", first, _paramsGetter.GetStaffCenterPosition() + shift); break; // B default: break; } }
public void Operate() { int temp; Boolean upOrDown = _list[0].GetShift() < 0; // 从五线谱中心往下偏移,说明符干朝上 int stemEnd; if (upOrDown) { temp = GetHighestNote(); stemEnd = temp + _paramsGetter.GetStaffCenterPosition() + _paramsGetter.GetNoteStemHeight(); } else { temp = GetLowestNote(); stemEnd = temp + _paramsGetter.GetStaffCenterPosition() - _paramsGetter.GetNoteStemHeight(); } foreach (Note note in _list) { note.SetEnd(stemEnd); note.SetUpOrDown(upOrDown); } }
// 绘制偏移线 private void DrawShiftLine(int shift) { if (shift > 4) { int num = (shift - 4) / 2 + 1; for (int i = 1; i < num; i++) { int y = ParamsGetter.GetStaffCenterPosition() + (4 + 2 * i) * ParamsGetter.GetPitchPositionDiff(); DrawLine(Start - 4 - ParamsGetter.GetNoteLeftShift(), y, Start + 4 + ParamsGetter.GetNoteRightShift(), y); } } else if (shift < -4) { int num = (-4 - shift) / 2 + 1; for (int i = 1; i < num; i++) { int y = ParamsGetter.GetStaffCenterPosition() - (4 + 2 * i) * ParamsGetter.GetPitchPositionDiff(); DrawLine(Start - 4 - ParamsGetter.GetNoteLeftShift(), y, Start + 4 + ParamsGetter.GetNoteRightShift(), y); } } }
protected override void OnDraw() { // 绘制定位光标 if (Cursor) { int tempStart = Start - 2 + Num * _rest.GetSymbolWidth(); DrawLine(tempStart, 0, tempStart, ParamsGetter.GetTotalHeight()); } // 乐符的位置 int yPosition = ParamsGetter.GetStaffCenterPosition(); // 如果是点,绘制 if (_rest.GetDot() == 1) { DrawPoint(Start + ParamsGetter.GetDotePosition(), yPosition); } // 乐符的内容 switch (Type) { case 1: DrawSymbol("\uE100", Start, yPosition); break; case 2: DrawSymbol("\uE101", Start, yPosition); break; case 4: DrawSymbol("\uE107", Start, yPosition); break; case 8: DrawSymbol("\uE109", Start, yPosition); break; case 16: DrawSymbol("\uE10A", Start, yPosition); break; case 32: DrawSymbol("\uE10B", Start, yPosition); break; case 64: DrawSymbol("\uE10C", Start, yPosition); break; case 128: DrawSymbol("\uE10D", Start, yPosition); break; default: break; } }
// 绘制一行乐谱线,根据小节数来绘制 private void DrawMeasureLines() { // 为线段构建一个Lines目录放置 _measureLines = new GameObject("Lines"); _measureLines.transform.SetParent(_parentObject.transform); _measureLines.transform.localPosition = new Vector3(0, 0, 0); int measureLength = _measure.GetMeasureLength(); // 绘制高音五条横乐谱线 for (int i = 0; i < 5; i++) { // 横线的纵坐标固定,第三条线(j==2)在乐谱中心位置 float yPosition = _paramsGetter.GetTotalHeight() + _paramsGetter.GetStaffCenterPosition() + (i - 2) * _paramsGetter.GetUnit(); // 设置线段宽高,横线,宽度为小节长度,高度为1 DrawLine(0, yPosition, measureLength, yPosition); } // 绘制每个高音小节的两条竖线 for (int i = 0; i < 2; i++) { // 竖线的纵坐标起点为五条横线的最下面一条线的纵坐标 float startY = _paramsGetter.GetTotalHeight() + _paramsGetter.GetStaffCenterPosition() - 2 * _paramsGetter.GetUnit(); float stopY = _paramsGetter.GetTotalHeight() + _paramsGetter.GetStaffCenterPosition() + 2 * _paramsGetter.GetUnit(); // 设置线段宽高,竖线,宽度为1,高度五线谱高度 DrawLine(measureLength * i, startY, measureLength * i, stopY); } // 绘制低音五条横乐谱线 for (int i = 0; i < 5; i++) { // 横线的纵坐标固定,第三条线(j==2)在乐谱中心位置 float yPosition = _paramsGetter.GetTotalHeight() - _paramsGetter.GetStaffCenterPosition() + (i - 2) * _paramsGetter.GetUnit(); // 设置线段宽高,横线,宽度为小节长度,高度为1 DrawLine(0, yPosition, measureLength, yPosition); } // 绘制每个低音小节的两条竖线 for (int i = 0; i < 2; i++) { // 竖线的纵坐标起点为五条横线的最下面一条线的纵坐标 float startY = _paramsGetter.GetTotalHeight() - _paramsGetter.GetStaffCenterPosition() - 2 * _paramsGetter.GetUnit(); float stopY = _paramsGetter.GetTotalHeight() - _paramsGetter.GetStaffCenterPosition() + 2 * _paramsGetter.GetUnit(); // 设置线段宽高,竖线,宽度为1,高度五线谱高度 DrawLine(measureLength * i, startY, measureLength * i, stopY); } }
private void OnDraw() { DrawText(_beat.GetBeats(), _paramsGetter.GetBeatPortraitShift(), _paramsGetter.GetStaffCenterPosition() + _paramsGetter.GetUnit() + _paramsGetter.GetTotalHeight()); DrawText(_beat.GetBeatType(), _paramsGetter.GetBeatPortraitShift(), _paramsGetter.GetStaffCenterPosition() - _paramsGetter.GetUnit() + _paramsGetter.GetTotalHeight()); }
protected override void OnDraw() { // 绘制定位线 if (Cursor) { int tempStart = Start - 2 + Num * _note.GetSymbolWidth(); DrawLine(tempStart, 0, tempStart, ParamsGetter.GetTotalHeight()); } // 乐符纵坐标 int yPosition = ParamsGetter.GetStaffCenterPosition() + _note.GetShift(); int shift = _note.GetShift() / ParamsGetter.GetPitchPositionDiff(); // 偏移线,当超过6的时候会画线。传入参数为shift,因为以左下角为原点 DrawShiftLine(shift); // 绘制变音记号 DrawAccidental(_note.GetAccidental(), yPosition); if (_note.GetDot() == 1) { DrawPoint(Start + ParamsGetter.GetDotePosition(), yPosition); } if (Type == 1) // 全音符 { DrawSymbol("\uE12B", Start, yPosition); if (_note.HasChord()) { DrawChord(); } } else { if (Type == 2) // 二分之一音符 { DrawSymbol("\uE12C", Start, yPosition); } else // 其余的所有 { DrawSymbol("\uE12D", Start, yPosition); } if (_note.IsUpOrDown()) { _stemX = Start + ParamsGetter.GetNoteRightShift(); // 符干向上时横坐标向右偏移 _stemY = yPosition; // 符干向上时纵坐标与乐符中心纵坐标位置相同 _tailX = Start + ParamsGetter.GetNoteTailUpLandscapeShift(); _tailY = _stemY + ParamsGetter.GetNoteStemHeight() - ParamsGetter.GetNoteTailDownPortraitShift(); } else { _stemX = Start - ParamsGetter.GetNoteLeftShift(); // 符干向下时横坐标向左偏移 _stemY = yPosition - ParamsGetter.GetNoteStemDownShift(); // 符干向下时纵坐标与乐符中心纵坐标位置偏移 _tailX = Start - ParamsGetter.GetNoteTailDownLandscapeShift(); _tailY = _stemY - ParamsGetter.GetNoteStemHeight() + ParamsGetter.GetNoteTailDownPortraitShift(); } _beamX = _stemX; _beamY = _note.GetEnd(); if (_note.HasChord()) { if (_note.IsUpOrDown()) { int temp = _note.GetShift(); foreach (Note noteChord in _note.GetChordList()) { if (temp > noteChord.GetShift()) { temp = noteChord.GetShift(); } } _tailY = temp + ParamsGetter.GetNoteStemHeight(); } DrawChord(); } DrawStem(); // 画符干 if (_note.IsSlur()) { DrawBeam(); // 画符杠 } else { DrawTail(); } } }