示例#1
0
        private void StartInversion()
        {
            var scale       = ChosenScale;
            var progression = Triad.ChordGen(scale, ProgressionPattern, ColorPattern, Repeat);
            var chordInv    = Triad.Inversion(progression, OctavePattern, InversionPattern, ChosenKey);
            var counter     = 0;

            RemainingCount = chordInv.Chords.Count;

            ThreadPool.QueueUserWorkItem(
                o =>
            {
                foreach (var chord in chordInv.Chords)
                {
                    SetNotes(chord.Notes);

                    MidiLogic.PlayChord(_mOut, SelectedChannel, 127, chord.Notes.ToArray());
                    Thread.Sleep(LengthPattern[counter % LengthPattern.Count]);
                    MidiLogic.StopChord(_mOut, SelectedChannel, 127, chord.Notes.ToArray());
                    counter++;
                    RemainingCount -= 1;
                }
            }
                );
        }
示例#2
0
        private void PlayFromInput(NoteEvent noteEvent)
        {
            if (noteEvent.Velocity > 0)
            {
                SetInputKey(noteEvent);
            }

            if (!ChordMode)
            {
                S1Value = noteEvent.NoteNumber;
                MidiLogic.PlayNote(_mOut, SelectedChannel, noteEvent.NoteNumber, noteEvent.Velocity);
            }
            else
            {
                var chord = Triad.InputChordGen(noteEvent.NoteNumber, TriadShapeEnum.Major);
                if (noteEvent.Velocity > 0)
                {
                    SetNotes(chord.Notes);
                }

                MidiLogic.PlayChord(_mOut, SelectedChannel, noteEvent.Velocity, chord.Notes.ToArray());
            }
        }