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); } }
public DiatonicTone( DiatonicToneClass keyclass, int octave ) { KeyClass = keyclass; Octave = octave; }
public static DiatonicToneClass ToLeft(this DiatonicToneClass key) => (DiatonicToneClass)(((int)key - 1) % 7);
public static DiatonicToneClass ToRight(this DiatonicToneClass key) => (DiatonicToneClass)(((int)key + 1) % 7);
public static DiatonicTone ToKey(this DiatonicToneClass keyclass, int octave) => new DiatonicTone( keyclass, octave );
public PitchTransform this[DiatonicToneClass key] { get { return(keytransforms[key]); } set { keytransforms[key] = value; } }
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); }