public static PatternMatcher Create(Pattern pattern, Settings settings, IMatchResultsCollector resultsCollector) { var patternBeatLists = ContinuousBeatsLooper.FromPattern(pattern).ToDictionary( kv => kv.Key, kv => new SingleInstrumentBeatsMatcher(kv.Key, new PatternBeatsTimesList( new BeatTimesList(settings.MaxMatchingTime), kv.Value), new BeatTimesList(settings.MaxMatchingTime), settings)); return(new PatternMatcher(settings, patternBeatLists, resultsCollector)); }
public void AddPlayed(TimedBeatId beat, IMatchResultsCollector results) { if (!patternBeats.Beats.IsEmpty) { var diff = beat.T - patternBeats.Beats.Next.T; if (Math.Abs(diff) <= settings.MaxMatchingTime) { var match = new BeatsMatch(patternBeats.Beats.RemoveNext(), beat, Accuracy(diff)); results.Match(match); return; } } playedBeats.Add(beat); }
public void Tick(float t, IMatchResultsCollector results) { //if (instrumentIndex == 2) // Drumz.Common.Diagnostics.Logger.TellF(Diagnostics.Logger.Level.Debug, "t: {0}, previousT: {1}", t, previousT); lock (playedBeats) { /*if (instrumentIndex == 2 && t - previousT > 0.1f) * { * previousT = t; * Drumz.Common.Diagnostics.Logger.TellF(Diagnostics.Logger.Level.Debug, "Pattern: {0}", patternBeats.Beats.Content.ToNiceString()); * Drumz.Common.Diagnostics.Logger.TellF(Diagnostics.Logger.Level.Debug, "Played: {0}", playedBeats.Content.ToNiceString()); * }*/ patternBeats.Tick(t, results.MissedBeat); playedBeats.Tick(t, results.MissedBeat); LookForMatches(results.Match); } }
private PatternMatcher(Settings settings, Dictionary <IInstrumentId, SingleInstrumentBeatsMatcher> perInstrumentMatchers, IMatchResultsCollector resultsCollector) { this.settings = settings; this.perInstrumentMatchers = perInstrumentMatchers; this.resultsCollector = resultsCollector; }