Example #1
0
        public static ChromaticPitchClass GetPitchClass(this DiatonicToneClass key)
        {
            switch (key)
            {
            case DiatonicToneClass.C:
                return(ChromaticPitchClass.C);

            case DiatonicToneClass.D:
                return(ChromaticPitchClass.D);

            case DiatonicToneClass.E:
                return(ChromaticPitchClass.E);

            case DiatonicToneClass.F:
                return(ChromaticPitchClass.F);

            case DiatonicToneClass.G:
                return(ChromaticPitchClass.G);

            case DiatonicToneClass.A:
                return(ChromaticPitchClass.A);

            case DiatonicToneClass.B:
                return(ChromaticPitchClass.B);

            default:
                return((ChromaticPitchClass)key);
            }
        }
Example #2
0
 public DiatonicTone(
     DiatonicToneClass keyclass,
     int octave
     )
 {
     KeyClass = keyclass;
     Octave   = octave;
 }
Example #3
0
 public static DiatonicToneClass ToLeft(this DiatonicToneClass key) =>
 (DiatonicToneClass)(((int)key - 1) % 7);
Example #4
0
 public static DiatonicToneClass ToRight(this DiatonicToneClass key) =>
 (DiatonicToneClass)(((int)key + 1) % 7);
Example #5
0
 public static DiatonicTone ToKey(this DiatonicToneClass keyclass, int octave) =>
 new DiatonicTone(
     keyclass,
     octave
     );
Example #6
0
 public PitchTransform this[DiatonicToneClass key] {
     get { return(keytransforms[key]); }
     set { keytransforms[key] = value; }
 }
Example #7
0
        public static KeySignature Create(
            DiatonicToneClass key,
            PitchTransform transform,
            Mode mode
            )
        {
            var modesteps = new PitchTransform[] {
                PitchTransform.DoubleSharp,
                PitchTransform.DoubleSharp,
                PitchTransform.Sharp,
                PitchTransform.DoubleSharp,
                PitchTransform.DoubleSharp,
                PitchTransform.DoubleSharp,
                PitchTransform.Sharp
            };

            var keysteps = new PitchTransform[] {
                PitchTransform.DoubleSharp,
                PitchTransform.DoubleSharp,
                PitchTransform.Sharp,
                PitchTransform.DoubleSharp,
                PitchTransform.DoubleSharp,
                PitchTransform.DoubleSharp,
                PitchTransform.Sharp
            };

            var mode_copy = mode;

            while (mode_copy != Mode.Major)
            {
                // rotate L one step
                var step0 = modesteps[0];
                for (int i = 1; i < modesteps.Length; i++)
                {
                    modesteps[i - 1] = modesteps[i];
                }
                modesteps[modesteps.Length - 1] = step0;

                mode_copy = (Mode)((int)mode_copy - 1);
            }

            var key_copy = key;

            while (key_copy != DiatonicToneClass.C)
            {
                // rotate L one step
                var step0 = keysteps[0];
                for (int i = 1; i < keysteps.Length; i++)
                {
                    keysteps[i - 1] = keysteps[i];
                }
                keysteps[keysteps.Length - 1] = step0;

                key_copy = (DiatonicToneClass)((int)key_copy - 1);
            }

            var signature =
                new KeySignature();

            var pitch = key.GetPitchClass();

            for (int i = 0; i < 7; i++)
            {
                signature[key] = transform;

                transform += modesteps[i];
                transform -= keysteps[i];

                //TODO: should modesteps[i] or transform be used here
                pitch = modesteps[i].Transform(pitch);
                key   = key.ToRight();
            }

            return(signature);
        }