Beispiel #1
0
        static int _currentPitch    = -1; // -1 表示尚未开始

        // 初始化音符序列
        public static void InitialSequence(int count)
        {
            StopCurrent();

            var chord = new Chord("C");

            int start = (int)Pitch.C4;

            _sequence = new List <int>();
            while (_sequence.Count < count)
            {
                // 音符不要越过最大值
                // TODO: 试验一下找一个不是特别高的音作为最高音
                if (start >= (int)Pitch.G9)
                {
                    // 保护
                    if (_sequence.Count == 0)
                    {
                        break;
                    }

                    _sequence.Add(_sequence[_sequence.Count - 1]);  // 用最后一个重复填充
                }
                else if (chord.Contains((Pitch)start))
                {
                    _sequence.Add(start);
                }

                start++;
            }

            _sequence.Reverse();

            _currentPitch = -1;
        }
Beispiel #2
0
        public void Contains()
        {
            Chord cmajor = new Chord("C");

            Pitch[] cmajorPitches = new Pitch[] {
                Pitch.C2, Pitch.E2, Pitch.G2
            };
            Pitch[] cmajorNotPitches = new Pitch[] {
                Pitch.CSharp2, Pitch.D2, Pitch.DSharp2, Pitch.F2, Pitch.FSharp2, Pitch.GSharp2,
                Pitch.A2, Pitch.ASharp2
            };
            foreach (Pitch p in cmajorPitches)
            {
                Assert.True(cmajor.Contains(p));
            }
            foreach (Pitch p in cmajorNotPitches)
            {
                Assert.False(cmajor.Contains(p));
            }

            Chord bbminor = new Chord("Bbm");

            Pitch[] bbminorPitches = new Pitch[] {
                Pitch.ASharp2, Pitch.CSharp3, Pitch.F3
            };
            Pitch[] bbminorNotPitches = new Pitch[] {
                Pitch.B2, Pitch.C3, Pitch.D3, Pitch.DSharp3, Pitch.E3, Pitch.G3, Pitch.FSharp3,
                Pitch.GSharp3, Pitch.A3
            };
            foreach (Pitch p in bbminorPitches)
            {
                Assert.True(bbminor.Contains(p));
            }
            foreach (Pitch p in bbminorNotPitches)
            {
                Assert.False(bbminor.Contains(p));
            }
        }
Beispiel #3
0
        void PlayChordRun(OutputDevice outputDevice, Chord chord, int millisecondsBetween)
        {
            Pitch previousNote = (Pitch)(-1);

            for (Pitch pitch = Pitch.A0; pitch < Pitch.C8; ++pitch)
            {
                if (chord.Contains(pitch))
                {
                    if (previousNote != (Pitch)(-1))
                    {
                        outputDevice.SendNoteOff(Channel.Channel1, previousNote, 80);
                    }
                    outputDevice.SendNoteOn(Channel.Channel1, pitch, 80);
                    Thread.Sleep(millisecondsBetween);
                    previousNote = pitch;
                }
            }
            if (previousNote != (Pitch)(-1))
            {
                outputDevice.SendNoteOff(Channel.Channel1, previousNote, 80);
            }
        }
Beispiel #4
0
        static int _currentPitch    = -1; // -1 表示尚未开始

        // 初始化音符序列
        public static void InitialSequence(int count)
        {
            StopCurrent();

            var chord = new Chord("C");

            int start = (int)Pitch.C4;

            _sequence = new List <int>();
            while (_sequence.Count < count)
            {
                if (chord.Contains((Pitch)start))
                {
                    _sequence.Add(start);
                }

                start++;
            }

            _sequence.Reverse();

            _currentPitch = -1;
        }