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