Ejemplo n.º 1
0
        public ChordListGenerator(ChordType chordType)
        {
            CompleteDeg = false;

            this.ct   = chordType;
            chordList = new List <Chord>();

            chordLnDeg123467 = new List <LnDeg>();
            chordLnDeg5      = new List <LnDeg>();

            MusicKeyInfo mki = new MusicKeyInfo(ct.musicKey, ct.keyRelation);

            for (int i = 0; i < 7; ++i)
            {
                chordLnDeg123467.Add(new LnDeg(mki.GetLnFromDegree(i), i + 1));
            }

            if (ct.is準固有)
            {
                // 準固有和音
                chordLnDeg123467[2] = new LnDeg(chordLnDeg123467[2].LetterName.Flat(), 3);
                chordLnDeg123467[5] = new LnDeg(chordLnDeg123467[5].LetterName.Flat(), 6);
            }

            chordLnDeg5.Add(chordLnDeg123467[4]); // 根音  V
            chordLnDeg5.Add(chordLnDeg123467[6]); // 第3音 VII
            chordLnDeg5.Add(chordLnDeg123467[1]); // 第5音 II
            chordLnDeg5.Add(chordLnDeg123467[3]); // 第7音 IV
            chordLnDeg5.Add(chordLnDeg123467[5]); // 第9音 VI

            if (ct.Is内部調は短調())
            {
                if (ct.has固有VII)
                {
                    // 短調で短調固有のVIIを持つ。
                }
                else
                {
                    // 短調固有のVIIではなく和声的VIIを持つ。第3音(VIIの音)を半音上げる。
                    chordLnDeg5[1] = new LnDeg(chordLnDeg123467[6].LetterName.Sharp(), 7);
                }
            }

            if (ct.addedTone == AddedToneType.SixFour &&
                ct.chordDegree == CD.IV &&
                ct.Is内部調は短調())
            {
                // 短調のIV付加4-6の和音の場合 付加第4音(VIIの音)を半音上げる。
                chordLnDeg123467[6] = new LnDeg(chordLnDeg123467[6].LetterName.Sharp(), 7);
            }

            if (ct.alteration == AlterationType.Lowered)
            {
                switch (ct.chordDegree)
                {
                case CD.V:
                    // V_V 下方変位 第5音(II)がフラットになる
                    chordLnDeg5[2] = new LnDeg(chordLnDeg123467[1].LetterName.Flat(), 2);
                    CompleteDeg    = true;
                    break;

                default:
                    System.Diagnostics.Debug.Assert(false);
                    break;
                }
            }

            if (ct.alteration == AlterationType.Naples)
            {
                switch (ct.chordDegree)
                {
                case CD.II:
                    // II ナポリの和音 根音(II)がフラットになる
                    chordLnDeg123467[1] = new LnDeg(chordLnDeg123467[1].LetterName.Flat(), 2);
                    break;

                default:
                    System.Diagnostics.Debug.Assert(false);
                    break;
                }
            }

            if (ct.alteration == AlterationType.Dorian)
            {
                switch (ct.chordDegree)
                {
                case CD.IV:
                    // IV ドリアの和音 第3音(VI)がシャープになる
                    chordLnDeg123467[5] = new LnDeg(chordLnDeg123467[5].LetterName.Sharp(), 6);
                    break;

                default:
                    System.Diagnostics.Debug.Assert(false);
                    break;
                }
            }

            if (ct.alteration == AlterationType.Raised)
            {
                switch (ct.chordDegree)
                {
                case CD.V:
                case CD.V_V:
                    // V上方変位 第5音がシャープになる(III巻p.224)
                    chordLnDeg5[2] = new LnDeg(chordLnDeg123467[1].LetterName.Sharp(), 2);
                    CompleteDeg    = true;
                    break;

                case CD.IV:
                    // IV+6, IV+46の和音 第6音(II)がシャープになる(III巻p.226)
                    chordLnDeg123467[1] = new LnDeg(chordLnDeg123467[1].LetterName.Sharp(), 2);
                    break;

                default:
                    System.Diagnostics.Debug.Assert(false);
                    break;
                }
            }
        }
Ejemplo n.º 2
0
 public LnDegInversion(LnDeg ld, Inversion inversion)
 {
     this.ld        = ld;
     this.inversion = inversion;
 }
Ejemplo n.º 3
0
 /// <summary>
 /// C#4.0になったらデフォルト引数でまとめる。
 /// </summary>
 public LnDegInversion(LN ln)
 {
     this.ld        = new LnDeg(ln, 0);
     this.inversion = Inversion.Unspecified;
 }
Ejemplo n.º 4
0
 public LnDegInversion(LN ln, int degree, Inversion inversion)
 {
     this.ld        = new LnDeg(ln, degree);
     this.inversion = inversion;
 }