/// <summary> /// Creates a score with just one staff (other staves can be added later) in specific clef and key signature determined by scale. /// </summary> /// <param name="clef">Clef</param> /// <param name="scale">Scale</param> /// <returns>A new score</returns> public static Score CreateOneStaffScore(Clef clef, MajorOrMinorScale scale) { var score = CreateOneStaffScore(); score.FirstStaff.Elements.Add(clef); score.FirstStaff.Elements.Add(Key.FromScale(scale)); return(score); }
/// <summary> /// Creates a score with just one staff (other staves can be added later). /// </summary> /// <returns>A new score</returns> public static Score CreateOneStaffScore(Clef clef, Step tonic, MajorAndMinorScaleFlags flags) { var score = CreateOneStaffScore(); score.FirstStaff.Elements.Add(clef); score.FirstStaff.Elements.Add(Key.FromTonic(tonic, flags)); return(score); }
/// <summary> /// Adds a new staff to the score. /// </summary> /// <param name="clef">Clef</param> /// <param name="timeSignature">Time signature</param> /// <param name="tonic">Tonic of key</param> /// <param name="flags">Scale flags</param> /// <returns>This score</returns> public Score AddStaff(Clef clef, TimeSignature timeSignature, Step tonic, MajorAndMinorScaleFlags flags) { var staff = new Staff(); staff.Elements.Add(clef); staff.Elements.Add(Key.FromTonic(tonic, flags)); Staves.Add(staff); return(this); }
/// <summary> /// Gets line number for this Note for specific Clef. Fractional numbers represent staff spaces, i.e. 1.5 == first space, etc. /// </summary> /// <param name="clef"></param> /// <returns></returns> public double GetLineInSpecificClef(Clef clef) { var stepDistance = (double)Pitch.StepDistance(this, clef); return(clef.Line + (stepDistance / 2)); }
/// <summary> /// This methods selects a appropriate clef for a note to make the note comfortably visible in the staff. /// </summary> /// <param name="n">Note</param> /// <param name="currentClef">Current clef</param> /// <returns>Appropriate clef</returns> public static Clef SuggestClefForANote(Note n, Clef currentClef) { if (currentClef.TypeOfClef == ClefType.GClef) { if ((currentClef.Line == 1) && (n.MidiPitch < 59)) { return(new Clef(ClefType.FClef, 4)); } else if ((currentClef.Line == 2) && (n.MidiPitch < 55)) { return(new Clef(ClefType.FClef, 4)); } else if ((currentClef.Line == 3) && (n.MidiPitch < 52)) { return(new Clef(ClefType.FClef, 4)); } else if ((currentClef.Line == 4) && (n.MidiPitch < 48)) { return(new Clef(ClefType.FClef, 4)); } else if ((currentClef.Line == 5) && (n.MidiPitch < 45)) { return(new Clef(ClefType.FClef, 4)); } else { return(currentClef); } } else if (currentClef.TypeOfClef == ClefType.FClef) { if ((currentClef.Line == 1) && (n.MidiPitch > 74)) { return(new Clef(ClefType.GClef, 2)); } else if ((currentClef.Line == 2) && (n.MidiPitch > 71)) { return(new Clef(ClefType.GClef, 2)); } else if ((currentClef.Line == 3) && (n.MidiPitch > 67)) { return(new Clef(ClefType.GClef, 2)); } else if ((currentClef.Line == 4) && (n.MidiPitch > 64)) { return(new Clef(ClefType.GClef, 2)); } else if ((currentClef.Line == 5) && (n.MidiPitch > 60)) { return(new Clef(ClefType.GClef, 2)); } else { return(currentClef); } } else { return(new Clef(ClefType.GClef, 2)); } }