protected MajorOrMinorScale(Step step, MajorAndMinorScaleFlags flags) : base(GetMode(flags.IsMinor), Pitch.FromStep(step).MidiPitch, flags.IsFlat ? Pitch.MidiPitchTranslationMode.Flats : Pitch.MidiPitchTranslationMode.Sharps) { Fifths = CircleOfFifths.CalculateFifths(step, flags); if (CircleOfFifths.GetAlterOfStepFromNumberOfFifths(step, Fifths) != step.Alter) { throw new MalformedScaleException(string.Format("There is no {0} {1} scale beginning on step {2}.", flags.IsMinor ? "minor" : "major", flags.IsFlat ? "flat" : (Math.Abs(Fifths) > 0 ? "sharp" : "natural"), step)); } Tonic = step; }
/// <summary> /// Returns the alteration of specific step. /// </summary> /// <param name="step"></param> /// <returns></returns> public int StepToAlter(string step) { return(CircleOfFifths.GetAlterOfStepFromNumberOfFifths(step, Fifths)); }