Beispiel #1
0
        public static ChordPattern FromString(string pattern)
        {
            if (string.IsNullOrEmpty(pattern))
            {
                throw new ArgumentNullException("pattern");
            }

            string[] words = pattern.Split(new char[] { ',' });

            var cp = new ChordPattern();

            foreach (string word in words.Where(w => !String.IsNullOrWhiteSpace(w)))
            {
                string candidate = word.Trim();

                Accidental accidental = Accidental.FromString(candidate);

                if (accidental != null)
                {
                    candidate = candidate.Substring(1);
                }

                int value = Convert.ToInt32(candidate, CultureInfo.CurrentCulture);

                if (value > 0)
                {
                    if (accidental != null)
                    {
                        value += accidental.Value;
                    }

                    var degrees = new ScaleDegree[]
                    {
                        ScaleDegree.First,
                        ScaleDegree.Second,
                        ScaleDegree.Third,
                        ScaleDegree.Fourth,
                        ScaleDegree.Fifth,
                        ScaleDegree.Sixth,
                        ScaleDegree.Seventh,
                        ScaleDegree.Octave,
                        ScaleDegree.FlatNinth,
                        ScaleDegree.Ninth,
                        ScaleDegree.SharpNinth,
                        ScaleDegree.Eleventh,
                        ScaleDegree.SharpEleventh,
                        ScaleDegree.Thirteen
                    };

                    if (value < 1 || value > degrees.Length)
                    {
                        throw new ArgumentOutOfRangeException("pattern", string.Format(CultureInfo.CurrentCulture, "Don't understand chord degree {0} -> {1}", words, value));
                    }

                    cp.Add(degrees[value - 1]);
                }
            }

            return(cp);
        }
        /*
         * Major Chords
         *
         * Major          1-3-5
         * maj7           1-3-5-7
         * maj9           1-3-5-7-9
         * maj11         1-3-5-7-9-11
         * maj13         1-3-5-7-9-11-13
         * maj6           1-3-5-6
         * maj6/9        1-3-5-6-9
         * maj7 6/9     1-3-5-6-7-9
         * maj#5         1-3-#5
         * majb5         1-3-b5
         * maj7#5       1-3-#5-7
         * maj7b5       1-3-b5-7
         * maj9b5       1-3-b5-7-9
         * maj9#5       1-3-#5-7-9
         * maj11b5     1-3-b5-7-9-11
         * maj11#5     1-3-#5-7-9-11
         * maj13b5     1-3-b5 7-9-11-13
         * maj13#5     1-3-#5-7-9-11-13
         * maj7b9       1-3-5-7-b9
         * maj7#9       1-3-5-7-#9
         * maj9#11     1-3-5-7-9-#11
         * maj11b13   1-3-5-7-9-11-b13
         * maj11#13   1-3-5-7-9-11-#13
         * maj11b9     1-3-5-7-b9-11
         * maj11#9     1-3-5-7-#9-11
         * maj13#11   1-3-5-7-9-#11-13
         * maj13b9     1-3-5-7-b9-11-13
         * maj13#9     1-3-5-7-#9-11-13
         *
         *  Minor Chords
         * minor          1-b3-5
         * m7             1-b3-5-b7
         * m9             1-b3-5-b7-9
         * m11           1-b3-5-b7-9-11
         * m13           1-b3-5-b7-9-11-13
         * m6             1-b3-5-6
         * m6/9          1-b3-5-6-9
         * m7#5         1-b3-#5-b7
         * m7b5         1-b3-b5-b7
         * m9#5         1-b3-#5-b7-9
         * m11#5       1-b3-#5-b7-9-11
         * m13#5       1-b3-#5-b7-9-11-13
         * m7b9         1-b3-5-b7-b9
         * m9#11       1-b3-5-b7-9-#11
         * m9b11       1-b3-5-b7-9-b11
         * m11b13     1-b3-5-b7-9-11-b13
         * m11b9       1-b3-5-b7-b9-11
         * m13b11     1-b3-5-b7-9-b11-13
         * m13#11     1-b3-5-b7-9-#11-13
         * m13b9       1-b3-5-b7-b9-11-13
         * m13#9       1-b3-5-b7-#9-11-13
         * m(maj7)     1-b3-5-7
         * m(maj9)     1-b3-5-7-9
         * m(maj11)   1-b3-5-7-9-11
         * m(maj13)   1-b3-5-7-9-11-13
         *
         * Dominant Chords
         * 7           1-3-5-b7
         * 9           1-3-5-b7-9
         * 11         1-3-5-b7-9-11
         * 13         1-3-5-b7-9-11-13
         * 7b5       1-3-b5-b7
         * 7#5       1-3-#5-b7
         * 9b5       1-3-b5-b7-9
         * 9#5       1-3-#5-b7-9
         * 11b5     1-3-b5-b7-9-11
         * 11#5     1-3-#5-b7-9-11
         * 13b5     1-3-b5-b7-9-11-13
         * 13#5     1-3-#5-b7-9-11-13
         * 7b9       1-3-5-b7-9
         * 7#9       1-3-5-b7-9
         * 9#11     1-3-5-b7-9-#11
         * 11b13    1-3-5-b7-9-11-b13
         * 11b9      1-3-5-b7-b9-11
         * 11#9      1-3-5-b7-#9-11
         * 13#11    1-3-5-b7-9-#11-13
         * 13b9      1-3-5-b7-b9-11-13
         * 13#9      1-3-5-b7-#9-11-13
         * 7 6/9      1-3-5-6-b7-9
         *
         *  Diminished Chords
         * dim           1-b3-b5
         * dim7         1-b3-b5-bb7
         * dim9         1-b3-b5-bb7-9
         * dim11       1-b3-b5-bb7-9-11
         *
         */

        public ChordPattern this[WellKnownChord pattern]
        {
            get
            {
                if (!this.chordLookup.ContainsKey(pattern))
                {
                    throw new ArgumentOutOfRangeException("pattern", "Unknown interval pattern");
                }

                return(ChordPattern.FromString(this.chordLookup[pattern]));
            }
        }
Beispiel #3
0
        // root and scale degree list

        public Chord(Scale scale, ChordPattern pattern)
        {
            if (scale == null)
            {
                throw new ArgumentNullException("scale");
            }

            if (pattern == null)
            {
                throw new ArgumentNullException("pattern");
            }

            foreach (var degree in pattern.Values)
            {
                this.chord.Add(scale[degree]);
            }
        }