public void Play(InstrumentType instrument, MetronomeMark metronomeMark, ChordOffset[] melody) { var stopwatch = new Stopwatch(); stopwatch.Start(); for (var strumIndex = 0; strumIndex < melody.Length;) { var strum = melody[strumIndex]; if (stopwatch.ElapsedMilliseconds > metronomeMark.WholeNoteLength.Multiply(strum.Offest).TotalMilliseconds) { var chord = strum.Chord; foreach (var note in chord.Notes) { instrument.GoToOctave(note); instrument.PlayNote(note); } strumIndex++; } else { Thread.Sleep(TimeSpan.FromMilliseconds(1)); } } stopwatch.Stop(); }
private static void PlayChord(InstrumentType instrument, Chord chord) { var notes = chord.Notes.ToArray(); for (var noteIndex = 0; noteIndex < notes.Length; noteIndex++) { instrument.PlayNote(notes[noteIndex]); if (noteIndex < notes.Length - 1) { PrepareNoteOctave(instrument, notes[noteIndex + 1]); } } }