private static int GetFractionOffset(PifagorTemperamentScale scale) { switch (scale) { case PifagorTemperamentScale.Lidiy: return(0); case PifagorTemperamentScale.Frigiy: return(2); case PifagorTemperamentScale.Doriy: return(4); case PifagorTemperamentScale.HyperDoriy: return(-1); case PifagorTemperamentScale.HypoLidiy: return(5); break; case PifagorTemperamentScale.HypoFrigiy: //ktfOffset = -5; return(7); case PifagorTemperamentScale.HypoDoriy: //ktfOffset = -3; return(9); default: throw new NotImplementedException(); } }
private static Interval[] GetScaleInterval(PifagorTemperamentScale scale) { switch (scale) { case PifagorTemperamentScale.Lidiy: return(LidiyIntervals); case PifagorTemperamentScale.Frigiy: return(FrigiyIntervals); case PifagorTemperamentScale.Doriy: return(DoriyIntervals); case PifagorTemperamentScale.HyperDoriy: return(HyperDoriyIntervals); case PifagorTemperamentScale.HypoLidiy: return(HypoLidiyIntervals); case PifagorTemperamentScale.HypoFrigiy: return(HypoFrigiyIntervals); case PifagorTemperamentScale.HypoDoriy: return(HypoDoriyIntervals); default: throw new NotImplementedException(); } }
private static Fraction[] GetFractionByTones(PifagorTemperamentScale scale) { var tonica = GetScaleInterval(scale); List <Fraction> r = new List <Fraction>(tonica.Length + 1); r.Add(1); for (int i = 0; i < tonica.Length; i++) { var f = r.Last(); switch (tonica[i]) { case Interval.Tone: f *= new Fraction(9, 8); break; case Interval.HalfTone: f *= new Fraction(256, 243); break; } r.Add(f.Reduce()); } return(r.ToArray()); }
public PifagorTemperament(double baseFrequency = 1, PifagorTemperamentScale scale = PifagorTemperamentScale.Lidiy) : base( "Pifagor " + scale.ToString(), baseFrequency, GetFractionByTones(scale), GetFractionOffset(scale), GetKbToFraction(GetScaleInterval(scale))) { }