Beispiel #1
0
        public int RandomRestOrNote()
        {
            var differentEvents = DifferentEvents.Where(e => e != (int)RestOrTie.Tie).ToList();
            var index           = ThreadSafeRandom.ThisThreadsRandom.Next(differentEvents.Count);

            return(differentEvents[index]);
        }
Beispiel #2
0
        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);
        }
Beispiel #3
0
        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);
            }
        }