/* * * /// <summary> * /// True if enharmonic with any of the accidentedDiatonicIntervals * /// </summary> * public bool IsEnharmonicWith(params Interval[] qualities) * { * if (qualities.Length == 0) * throw new ArgumentNullException("qualities"); * var tempThis = this; * var result = qualities.Any(tempThis.IsEnharmonicWith); * * return result; * } * * public Interval? ToEnharmonic(Interval interval) * { * var result = * IsEnharmonicWith(interval) * ? (Interval?) interval * : null; * * return result; * } * * public Interval? ToEnharmonic(params Interval[] qualities) * { * if (qualities.Length == 0) * throw new ArgumentNullException("qualities"); * * var tmpThis = this; * foreach (var interval in qualities.Where(tmpThis.IsEnharmonicWith)) * return interval; * return null; * } * * /// <summary> * /// Returns a new Interval where explicit natural is replace with natural * /// </summary> * public Interval ToNormalizedNatural() * { * if (Accidental != Accidental.Natural) * return this; * * var result = new Interval(this.interval, Accidental.None); * * return result; * } * */ public Interval ToInversion() { var invertedDiatonicInterval = DiatonicInterval.Invert(); var result = new Interval(invertedDiatonicInterval, !Accidental); return(result); }
public Interval( DiatonicInterval diatonicInterval, Accidental accidental) : base(GetDistance(diatonicInterval, accidental)) { DiatonicInterval = diatonicInterval; Accidental = accidental; Name = $"{Accidental}{(int) diatonicInterval}"; }
public override int GetHashCode() { unchecked { int hashCode = base.GetHashCode(); hashCode = (hashCode * 397) ^ DiatonicInterval.GetHashCode(); hashCode = (hashCode * 397) ^ Accidental.GetHashCode(); return(hashCode); } }
public bool Equals(Interval other) { if (ReferenceEquals(null, other)) { return(false); } if (ReferenceEquals(this, other)) { return(true); } return(base.Equals(other) && DiatonicInterval.Equals(other.DiatonicInterval) && Accidental.Equals(other.Accidental)); }
protected override DiatonicInterval OnAmbitusExceeded(DiatonicInterval generatedInterval, Pitch generatedPitch) { if (generatedPitch > MaxPitch) { generatedInterval = generatedInterval.MakeDescending(); } if (generatedPitch < MinPitch) { generatedInterval = generatedInterval.MakeAscending(); } return(generatedInterval); }
public int CompareTo(Interval other) { var result = DiatonicInterval.CompareTo(other.DiatonicInterval); if (result != 0) { return(result); } result = Accidental.CompareTo(other.Accidental); return(result); }
private static int GetDistance( DiatonicInterval diatonicInterval, Accidental accidental) { var diatonicDistance = (int)diatonicInterval - 1; var octave = 0; if (diatonicDistance >= 8) { diatonicDistance -= 8; octave = 1; } if (diatonicDistance < 0) { diatonicDistance += 8; octave = -1; } var result = ScaleDefinition.Major.Absolute[diatonicDistance] + accidental.Distance + octave * 8; return(result); }
public Interval(DiatonicInterval diatonicInterval) : this(diatonicInterval, Accidental.None) { }
// ReSharper restore InconsistentNaming public IntervalFilter(DiatonicInterval diatonicInterval) : base(diatonicInterval) { }
protected virtual DiatonicInterval OnAmbitusExceeded(DiatonicInterval generatedInterval, Pitch generatedPitch) { return(generatedInterval); }