public int RandomRestOrNote() { var differentEvents = DifferentEvents.Where(e => e != (int)RestOrTie.Tie).ToList(); var index = ThreadSafeRandom.ThisThreadsRandom.Next(differentEvents.Count); return(differentEvents[index]); }
public void Set(Melody baseMelody) { var allEvents = baseMelody .Measures .SelectMany(m => m.Events).ToList(); var groupedByType = allEvents.GroupBy(e => e.Number).ToList(); DifferentEvents.AddRange(groupedByType.Select((IGrouping <int, Event> e) => e.Key)); Rates.Add(new TypeEventRate(typeof(Note), allEvents.OfType <Note>().Count() / (double)allEvents.Count() * 100)); Rates.Add(new TypeEventRate(typeof(Rest), allEvents.OfType <Rest>().Count() / (double)allEvents.Count() * 100)); Rates.Add(new TypeEventRate(typeof(Tie), allEvents.OfType <Tie>().Count() / (double)allEvents.Count() * 100)); Rates.OrderBy(r => r.Rate); }
public int RandomEventWithRate() { var type = GetTypeByRate(); if (type == typeof(Note)) { var differentNotes = DifferentEvents.Where(e => e != (int)RestOrTie.Tie && e != (int)RestOrTie.Rest).ToList(); var index = ThreadSafeRandom.ThisThreadsRandom.Next(differentNotes.Count); return(differentNotes[index]); } else if (type == typeof(Rest)) { return((int)RestOrTie.Rest); } else { return((int)RestOrTie.Tie); } }