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; } } ); }
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()); } }