private void beginGenerationButton_Click(object sender, EventArgs e) { try { var retriever = new PianoNoteRetriever(); var midiEvents = new InstrumentMidiEventProducer(this.files.Select(x => new Sequence(x))); IReadOnlyList <MidiEvent> midi = midiEvents.GetOrderedMessages(GeneralMidiInstrument.AcousticGrandPiano); Chord.AllowForComplexSimplification = this.checkBox1.Checked; var accords = Chord.RetrieveChords(midi, retriever); INGrams <Chord> grams = null; if (this.homogeneous) { grams = HomogenousNGrams <Chord> .BuildNGrams((int)this.leftRangeNumericUpDown.Value, accords); } else { grams = HeterogenousNGrams <Chord> .BuildNGrams((int)this.leftRangeNumericUpDown.Value, (int)this.rightRangeNumericUpDown.Value, accords); } NGramGraphMarkovChain <Chord> graph = new NGramGraphMarkovChain <Chord>(grams); this.Save(graph); } catch (Exception ex) { MessageBox.Show(ex.Message); } }
public DiscreteDataRetriever(List <Chord> chordsInOrder, int clusterSize = 2, int windowSize = 20) { chordsInOrder.NullCheck(); chordsInOrder.Any().AssertTrue(); this.Chords = chordsInOrder.AsReadOnly(); this.WindowSize = windowSize; this.NGramSize = clusterSize; this.HomogenousWindowingData = HomogenousNGrams <Chord> .BuildNGrams(this.NGramSize, this.Chords.ToList()); this.badOkayGoodChords = Tuple.Create <List <NGram <Chord>[]>, List <NGram <Chord>[]>, List <NGram <Chord>[]> >(this.RetrieveBad(), this.RetrieveOkay(), this.RetrieveGood()); }
private List <NGram <Chord>[]> RetrieveGood() { var window = HomogenousNGrams <NGram <Chord> > .BuildNGrams(this.WindowSize, this.HomogenousWindowingData.ToList()); return(window.Select(x => x.ToArray()).ToList()); }