public void Draw(SKCanvas canvas, SKRect gridRect, PerformanceSummary summary) { canvas.Save(); canvas.Translate(0, gridRect.Height); foreach (var beat in pattern.Ids) { var beatInfo = pattern.Beat(beat); var summaryForBeat = summary.BeatSummary(beat); var point = gridCoordinates.Coordinates(beatInfo.Sound.Instrument, beatInfo.T); PrintBeatSummary(canvas, point, summaryForBeat); } canvas.Restore(); }
public static IDictionary <IInstrumentId, ContinuousBeatsLooper> FromPattern(Pattern pattern) { var info = pattern.Info; var allBeats = new Dictionary <IInstrumentId, List <TimedBeatId> >(); foreach (var beatId in pattern.Ids) { var beat = pattern.Beat(beatId); if (!allBeats.TryGetValue(beat.Sound.Instrument, out List <TimedBeatId> beatsForInstrument)) { beatsForInstrument = new List <TimedBeatId>(); allBeats.Add(beat.Sound.Instrument, beatsForInstrument); } beatsForInstrument.Add(new TimedBeatId(info.TimeInBeats(beat.T), beatId)); } var totalLength = info.BarsCount * info.BeatsPerBar; return(allBeats.ToDictionary(kv => kv.Key, kv => new ContinuousBeatsLooper(kv.Value.ToArray(), totalLength))); }