Ejemplo n.º 1
0
 public override int GetHashCode()
 {
     unchecked
     {
         var result = 17;
         result = result * 23 + IntervalNumber.GetHashCode();
         result = result * 23 + Alteration.GetHashCode();
         return(result);
     }
 }
Ejemplo n.º 2
0
        public Key GetByIntervalNumber(Key startKey, IntervalNumber intervalNumber)
        {
            var outKey = startKey;

            for (int i = 0; i < (int)intervalNumber; i++)
            {
                outKey = GetNextKey(outKey);
            }
            return(outKey);
        }
Ejemplo n.º 3
0
        private static int GetSemitones(IntervalNumber number, IntervalQuality quality, sbyte multiplicity)
        {
            int semitones = s_numberToSemitones[number - IntervalNumber.Unison];

            if (quality == IntervalQuality.Minor || quality == IntervalQuality.Diminished && !number.IsPerfect())
            {
                semitones--;
            }

            if (multiplicity > 0)
            {
                if (quality == IntervalQuality.Augmented)
                {
                    semitones += multiplicity;
                }
                else
                {
                    semitones -= multiplicity;
                }
            }

            return(semitones);
        }
Ejemplo n.º 4
0
        public static Interval operator +(Interval interval1, Interval interval2)
        {
            int absoluteNumber = interval1._absoluteNumber + interval2._absoluteNumber;

            int semitones = (interval1.Semitones + interval2.Semitones) % SemitonesPerOctave;

            IntervalNumber number = (IntervalNumber)Math.Abs(absoluteNumber % NumbersPerOctave);

            IntervalQuality quality;

            if (number.IsPerfect())
            {
                quality    = IntervalQuality.Perfect;
                semitones -= GetSemitones(number, quality, 0);
            }
            else
            {
                quality    = IntervalQuality.Major;
                semitones -= GetSemitones(number, quality, 0);
                if (semitones < 0)
                {
                    quality = IntervalQuality.Minor;
                    semitones++;
                }
            }

            if (semitones > 0)
            {
                quality = IntervalQuality.Augmented;
            }
            else if (semitones < 0)
            {
                quality = IntervalQuality.Diminished;
            }

            return(new Interval(absoluteNumber, quality, (sbyte)Math.Abs(semitones)));
        }
Ejemplo n.º 5
0
 public KeyViewModel Get(Key startKey, IntervalNumber intervalNumber)
 {
     return(_keyService.GetByIntervalNumber(startKey, intervalNumber));
 }
Ejemplo n.º 6
0
        public void Test_GetByIntervalNumber(Key inputKey, IntervalNumber interval, Key expectedKey)
        {
            var key = _keyService.GetByIntervalNumber(inputKey, interval);

            Assert.That(key, Is.EqualTo(expectedKey));
        }
Ejemplo n.º 7
0
 public static bool IsPerfect(this IntervalNumber number)
 {
     return(number == IntervalNumber.Unison || number == IntervalNumber.Fourth || number == IntervalNumber.Fifth || number == IntervalNumber.Octave);
 }
Ejemplo n.º 8
0
 public Interval(IntervalNumber number, IntervalQuality quality, sbyte multiplicity = 0)
     : this(IntervalNumber.Unison <= number && number <= IntervalNumber.Octave ? number - IntervalNumber.Unison : throw new ArgumentOutOfRangeException(nameof(number)),
            quality, multiplicity)
 {
 }