示例#1
0
        private List <Pitch> GenerateBassPositions()
        {
            List <Pitch> bassPositions = new List <Pitch>();

            for (int oct = Pitch.BasLowestOctave(); oct <= Pitch.BasHighestOctave(); ++oct)
            {
                Pitch pitch = new Pitch(GetChordLnDegInversion(ct.bassInversion), oct);
                if (pitch.IsWithinTheRange(Part.Bas))
                {
                    bassPositions.Add(pitch);
                }
            }
            return(bassPositions);
        }
示例#2
0
        private void GenerateUpper3Step(bool standard, Pitch bas, List <LnDegInversion> upper3, int step, PositionOfAChord positionOfAChord)
        {
            for (int i = 0; i < upper3.Count; ++i)
            {
                for (int tenOct = Pitch.TenLowestOctave(); tenOct <= Pitch.TenHighestOctave(); ++tenOct)
                {
                    Pitch ten = new Pitch(upper3[i], tenOct);
                    if (!ten.IsWithinTheRange(Part.Ten))
                    {
                        continue;
                    }

                    for (int altOct = Pitch.AltLowestOctave(); altOct <= Pitch.AltHighestOctave(); ++altOct)
                    {
                        Pitch alt = new Pitch(upper3[(i + step) % upper3.Count], altOct);
                        if (!alt.IsWithinTheRange(Part.Alt))
                        {
                            continue;
                        }

                        for (int sopOct = Pitch.SopLowestOctave(); sopOct <= Pitch.SopHighestOctave(); ++sopOct)
                        {
                            Pitch sop = new Pitch(upper3[(i + step * 2) % upper3.Count], sopOct);
                            if (!sop.IsWithinTheRange(Part.Sop))
                            {
                                continue;
                            }

                            Chord chord = new Chord(ct, standard, bas, ten, alt, sop);
                            if (chord.Verdict != VerdictValue.Delist &&
                                chord.IsWithinTheRange() &&
                                chord.Upper3PositionIsCorrect() &&
                                !chordList.Contains(chord, new ChordEqualityComparer()))
                            {
                                //System.Console.WriteLine("{0} {1} {2}", ten.LetterName.LN, alt.LetterName.LN, sop.LetterName.LN);
                                chordList.Add(chord);
                            }
                        }
                    }
                }
            }
        }
示例#3
0
 private void GenerateUpper3(bool standard, Pitch bas, List <LnDegInversion> upper3, PositionOfAChord positionOfAChord)
 {
     GenerateUpper3Step(standard, bas, upper3, 1, positionOfAChord);
     GenerateUpper3Step(standard, bas, upper3, 2, positionOfAChord);
 }
示例#4
0
 /// <summary>
 /// rhsとの音程(1度=0) 絶対値。同度=0、1オクターブ=7
 /// </summary>
 /// <returns>
 /// 0: 完全1度、増一度、重増一度
 /// 1: 短二度、長二度、減二度、増二度、重増二度
 /// 2: 短3度、長3度、減3度、重減3度、増3度、重増3度
 /// 3: 完全4度、増4度、減4度、…
 /// 4: 5度
 /// 7: 8度
 /// 8: 9度
 /// 11: 12度
 /// </returns>
 public int AbsIntervalNumberWith(Pitch rhs)
 {
     return(Math.Abs(HigherIntervalTo(rhs)));
 }
示例#5
0
 /// <summary>
 /// 楽譜の上でrhsの上に来るか下に来るか。
 /// 正: rhsのほうが低い 数字は度。
 /// 負: rhsのほうが高い 数字は度。
 /// 例:  ten.HigherIntervalTo(bas) > 0
 /// 注:この比較は(フラットやシャープを考慮しているが)あくまで楽譜の上で
 /// 上か下かを判断するものでCes4よりもHis3のほうが低いと判断する。
 /// </summary>
 /// <param name="rhs">比較対象のピッチ。</param>
 public int HigherIntervalTo(Pitch rhs)
 {
     return(GetIntervalNumberFromC0() - rhs.GetIntervalNumberFromC0());
 }
示例#6
0
 /// <summary>
 /// rhsとの半音の数(絶対値)。0==同音、12==1オクターブ
 /// </summary>
 /// <param name="rhs">比較対象。</param>
 public int AbsNumberOfSemitonesWith(Pitch rhs)
 {
     return(Math.Abs(HigherPitchTo(rhs)));
 }
示例#7
0
 /// <summary>
 /// MIDIで発音したときのピッチを比較する。
 /// 正: rhsのほうが低い 数字は半音の数。
 /// 負: rhsのほうが高い 数字は半音の数。
 /// 例:  ten.HigherPitchTo(bas) > 0
 /// </summary>
 public int HigherPitchTo(Pitch rhs)
 {
     return(GetMidiPitchValue() - rhs.GetMidiPitchValue());
 }
示例#8
0
 public Pitch(Pitch rhs)
 {
     ldi    = rhs.ldi;
     octave = rhs.octave;
 }