Пример #1
0
        /// <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);
        }
Пример #2
0
        /// <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);
        }
Пример #3
0
        /// <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);
        }
Пример #4
0
        /// <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));
        }
Пример #5
0
 /// <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));
     }
 }