public static PlayLineHarmony GetResult(ITempoForBars tempo, IBarTemplateModel template, List <Note.Note> noteList, PlayOrderType orderType) { PlayLineHarmony playLine = new PlayLineHarmony(); playLine.Instrument = Sanford.Multimedia.Midi.GeneralMidiInstrument.Accordion; playLine.Order = 1; playLine.Vol = 127; playLine.NoteQueue = new List <PlayLineNotes>(); Random r = new Random(); var repeatRandom = r.Next(0, 19); var minOctav = r.Next(3, 5); var maxOctav = r.Next(5, 7); var skipRandom = r.Next(1, 8); int[] notes = noteList.Where(a => a.Octave >= minOctav && a.Octave <= maxOctav).Skip(skipRandom).Take(template.NoteCount).OrderByDescending(a => a.Number).Select(a => a.Number).ToArray(); if (orderType == PlayOrderType.Ascending) { notes = notes.OrderBy(a => a).ToArray(); } else if (orderType == PlayOrderType.Randomize) { notes = notes.Randomize().Take(notes.Length).ToArray(); } for (int j = 0; j < notes.Length; j++) { var newNote = GetNote(playLine.NoteQueue.Count + 1, tempo, template.AllNoteValues[j].NoteValue, noteList, notes[j]); playLine.NoteQueue.Add(newNote); } return(playLine); }
public static PlayLineHarmony GetResult(ITempoForBars tempo, List <Note.Note> noteList, List <IBarTemplateModel> templates) { PlayLineHarmony playLine = new PlayLineHarmony(); playLine.Instrument = Sanford.Multimedia.Midi.GeneralMidiInstrument.Banjo; playLine.Order = 1; playLine.Vol = 127; playLine.NoteQueue = new List <PlayLineNotes>(); Random r = new Random(); templates = templates.OrderBy(a => Guid.NewGuid()).ToList(); for (int i = 0; i < templates.Count(); i++) { var repeatRandom = r.Next(0, 19); var minOctav = r.Next(2, 5); var maxOctav = r.Next(5, 8); var skipRandom = r.Next(1, 8); var template = templates[i]; int[] notes = noteList.Where(a => a.Octave >= minOctav && a.Octave <= maxOctav).Skip(skipRandom).Take(template.NoteCount).OrderByDescending(a => a.Number).Select(a => a.Number).ToArray(); if (repeatRandom >= 17) { notes = notes.OrderBy(a => a).ToArray(); } else if (repeatRandom >= 2) { notes = notes.Randomize().Take(notes.Length).ToArray(); } var repeat = new List <PlayLineNotes>(); for (int j = 0; j < notes.Length; j++) { var newNote = GetNote(playLine.NoteQueue.Count + 1, tempo, template.AllNoteValues[j].NoteValue, noteList, notes[j]); playLine.NoteQueue.Add(newNote); repeat.Add(newNote); } if (repeatRandom > 15) { foreach (var item in repeat) { playLine.NoteQueue.Add(item); } foreach (var item in repeat) { playLine.NoteQueue.Add(item); } } else if (repeatRandom > 12) { foreach (var item in repeat) { playLine.NoteQueue.Add(item); } } if (repeatRandom % 3 == 0) { playLine.NoteQueue.Add(new PlayLineNotes() { IsPlayed = false, Length = tempo.QuarterLength, Note = null, Order = playLine.NoteQueue.Count + 1, Silence = true }); } } return(playLine); }